一、函数的多个返回值
当函数段运行到return行的时候,函数会返回一个值,然后退出函数段,那么如果我想要函数能返回多个值该怎么办呢?
显然,写两个并列的return是不可以的,因为运行完第一个return时,函数就已经结束了,不会运行下一个return,所以正确的写法应该如下:
def test_return():
return 1,2
x,y =test_return()
print(x) #返回结果1
print(y) #返回结果2
用“ ,”将两个返回值分割开,然后用两个变量分别接收就可以了,还可以用一个变量接收,系统会返回一个包含所有返回值的元组。
def test_return():
r1 = '第一个返回值'
r2 = '第二个返回值'
r3 = '第三个返回值'
return r1,r2,r3
s = test_return()
print(s)
此外,返回值的类型是不受限的,可以返回字符型,整形,布尔型等等。
二、函数参数的多种使用形式
1.位置参数
最常用的传递参数的方法,即实参顺序依据形参顺序来排列。
def user_info(name,gender,age):
print(f'您的名字是{name},{gender}性,今年{age}岁')
user_info('小明','男','19')
2.关键字参数
通过“键=值”的方式传参,好处是消除了函数定义时的顺序要求。
def user_info(name,gender,age):
print(f'您的名字是{name},{gender}性,今年{age}岁')
#关键字传参
user_info(name='小明',gender='男',age='19')
user_info(gender='男',age='19',name='小华')
3.缺省参数
也叫默认参数,函数调用时可以不提供这一参数,使用默认参数,但是缺省参数必须在位置参数定义完成以后,在最后定义。
def user_info(name,gender,age='19'):
print(f'您的名字是{name},{gender}性,今年{age}岁')
user_info('小明','男','20') #自定义参数
user_info('小华','男') #使用默认参数
4.不定长参数
用于不确定会传入多少个参数的时候(也可以不传参)。
(1)所有参数都可以用*args来接收,然后根据参数传入的顺序用一个元组输出。
def user_info(*args):
print(args)
user_info('Kiku')#输出('Kiku',)
user_info('Siri,Kiku')#输出('Siri','Kiku',)
(2)传入的参数用关键字形式表示,用**kwargs来接收,然后用一个字典输出。
def user_info(**kwargs):
print(kwargs)
user_info(name='Kiku')#输出{'name': 'Kiku'}
user_info(name='Kiku',age='19')#输出{'name': 'Kiku', 'age': '19'}
三、匿名函数
1.函数作为参数传递
有时候不确定需要传入的参数是什么,需要用另一个函数对参数进行处理。
这个时候传入的参数应该是经过另一个函数处理后的参数,但此时我们并不知道这个参数是什么,这时我们可以将另一个函数作为参数传递。简单来说,这是一种计算逻辑的传递,而不是参数的传递。
def test_func(compute):#将compute函数作为参数传入
result = compute(1,2)
print(result)
def compute(x,y):
return x+y
test_func(compute)#函数compute作为参数传入test_func中使用,输出3
2.lambda匿名函数
lambda关键字可以定义无名字的函数,有名称的函数可以多次使用,无名称的函数只能临时使用一次,使用lambda函数节省了内存中变量的定义,而且可以避免给函数取名浪费时间。
语法:lambda 传入参数:函数体(一行代码)
def test_func(compute):#将compute函数作为参数传入
result = compute(1,2)
print(result)
test_func(lambda x,y:x+y)#使用匿名函数代替compute函数
上例使用函数作为参数传递时,需要先定义compute函数,然后调用计算,比较麻烦,我们可以使用lambda关键字临时定义一个函数,优化了代码。