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