Python基础学习day3|函数

函数

函数是带名字的代码块,用于完成具体的工作。要执行函数定义的特定任务,可调用该函数。需要在程序中多次执行同一项任务时,你无需反复编写完成该任务的代码,而只需调用执行该任务的函数,让Python运行其中的代码。

定义函数

定义函数的关键字:def,由此来告诉Python这是一个函数。

代码示例:

>>> def hello_user():
    """函数体说明部分"""   #此处为文档字符串注释
    mes=("你好世界!")
    print(mes)

>>> hello_user()

执行结果:

你好世界!

def关键字定义函数;hello_user()是该函数的函数名;冒号定义结尾;冒号后面到缩进结尾表示该函数的函数体,也就是函数需要做什么。上述函数就是打印一个变量。执行结果为:你好世界。而最后一行表示调用函数名为hello_user()的函数。

向函数传递信息

在函数名后面的括号可以进行传参操作,例如传入简单的用户名。

代码示例:

def get_user(username):
    """用户信息"""
    print("我的名字叫: " + username)
    
get_user("你好我是函数")

执行结果:

我的名字叫:你好我是函数

实参和形参

方法在定义的时候的参数称为形参,函数完成其工作所需的一项信息;函数在调用的时候传入的参数称为实参。

例如在上面的代码中,get_user(username)username形参,而调用的时候输入你好我是函数实际参数

传递实参

鉴于函数定义中可能包含多个形参,因此函数调用中也可能包含多个实参。向函数传递实参的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同;也可使用关键字实参,其中每个实参都由变量名和值组成;还可使用列表和字典。

位置实参

调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参。

def get_user(type,value):
    """用户信息"""
    print("我的" + type + "是: " + value)
    
get_user("年龄",'18')

根据type的类型传入的值,输入不一样的结果。传入的年龄就存入函数的type变量中,18就存入value变量中。这样就能够完整的输出。结果为:我的年龄是: 18

根据这个结果可以推出,该函数可以被多次调用。例如:

def get_user(type,value):
    """用户信息"""
    print("我的" + type + "是: " + value)
    
get_user("年龄",'18')
get_user("体重",'100')
get_user("身高",'180')
get_user("性别",'男')

输出的结果是:

我的年龄是: 18
我的体重是: 100
我的身高是: 180
我的性别是: 男

需要注意的是传参的位置很重要。如果传参顺序出错,就容易出现笑话。

例如:

>>>def get_user(type,value):
    """用户信息"""
    print("我的" + type + "是: " + value)
    
>>>get_user("年龄",'18')
>>>get_user("100",'体重')
>>>get_user("100",'身高')
>>>get_user("男",'性别')

运行的结果:

我的年龄是: 18
我的100是: 体重
我的100是: 身高
我的男是: 性别

关键字实参

关键字实参是传递给函数的名称—值对。直接在实参中将名称和值关联起来了,因此向函数传递实参时不会混淆。关键字实参让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。

代码示例:

>>>def get_user(type,value):
    """用户信息"""
    print("我的" + type + "是: " + value)
    
>>>get_user("年龄",'18')
>>>get_user(value="18",type = 'age')

运行结果

我的年龄是: 18
我的age是: 18

默认值

编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用 指定的实参值;否则,将使用形参的默认值。因此,给形参指定默认值后,可在函数调用中省略相应的实参。使用默认值可简化函数调用,还可清楚地指出函数的典型用法。

代码示例:

def get_user(type,value = '19'):
    """用户信息"""
    print("我的" + type + "是: " + value)
    
get_user("年龄",'18')  # value传值为18
get_user("年龄")  #没有传值,获取默认值

运行结果:

我的年龄是: 18
我的年龄是: 19

使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参。 这让Python依然能够正确地解读位置实参。

等效的函数调用

鉴于可混合使用位置实参、关键字实参和默认值,通常有多种等效的函数调用方式。基于这种定义,在任何情况下都必须给函数提供实参;同样,指定该实参时可以使用位置方式,也可以使用关键字方式。

返回值

函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或一组值。函数返回的值被称为返回值。在函数中,可使用return语句将值返回到调用函数的代码行。返回值让你能够将程序的大部分繁重工作移到函数中去完成,从而简化主程序。

返回简单值
代码示例:

def get_user_info(type,info):  #传递两个形参
    """返回用户信息"""
    user_info =  "我的" + type + "是: " + info  #将type和info存放到user_info中
    return user_info.title()  #user_info的值转换首字母大写

my = get_user_info('身高','190')  #提供变量my,将返回值存放进去
print(my)   #打印返回值

运行结果:

我的身高是: 190

返回一条字符串类型的用户的信息,然后赋值给变量user_info,最后打印输出。

让实参变成可选的

在某些时候我们的参数可能不是必选,但是需要设置默认值就可以决定是否需要传参。
代码示例:

>>> 
def get_name(first_name,last_name,middle_name=''): #中间名字可选
    """返回全名"""
    if middle_name:  #有中间名字的情况
        full_name=first_name+' '+middle_name+' '+last_name
    else:  #没有的情况
        full_name=first_name+'  '+last_name
    return full_name.title()

>>> my_name=get_name('jimi','json')  #没有中间的名字
>>> print(my_name)

>>> my_name=get_name('jimi','json','lee')  #有中间的名字
>>> print(my_name)

运行结果:

Jimi Json
Jimi Lee Json

返回字典

将用户的信息存储在字典中。

def build_person(first_name, last_name): 
    """返回一个字典,其中包含有关一个人的信息"""
    person = {'first': first_name, 'last': last_name}
    return person

musician = build_person('jimi', 'hendrix')
print(musician)

运行结果:

{'first':'jimi', 'last':'hendrix'}

同时该字典还可以不断的增加。例如新增返回年龄。

调用函数:

def build_person(first_name, last_name,age=''): 
    """返回一个字典,其中包含有关一个人的信息"""
    person = {'first': first_name, 'last': last_name}
    if age:
        person['age'] = age
    return person
 
musician = build_person('jimi', 'hendrix',age=19)
print(musician)

返回结果:

{'first': 'jimi', 'last': 'hendrix', 'age': 19}

你可能感兴趣的:(Python基础学习day3|函数)