1.匿名函数介绍
在Python中,通过lambda关键字来定义的函数称为匿名函数;
lambda函数能接收任何数量(可以是0个)的参数,但只能返回一个表达式的值,lambda函数是一个函数对象,直接赋值给一个变量,这个变量就成了一个函数对象
语法:lambda 参数 : 表达式
先写lambda关键字,然后依次写匿名函数的参数,多个参数中间用英文逗号分隔,然后是一个英文冒号,冒号后面写返回的表达式;
使用场景:
1.需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或返回值一);
2.要处理的业务符合lambda函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambad函数;
3.与一些python的内置函数配合合适,提高代码的可读性;
2.匿名函数与普通函数的对比
def sum_func(a, b, c):
return a + b + c
sum_lambda = lambda a, b, c: a + b + c
print(sum_func(1, 100, 10000))
print(sum_lambda(1, 100, 10000))
运行结果:
10101
10101
可以看到,lambda适用于多个参数、一个返回值的情况,可以用一个变量来接收,变量是一个函数对象,执行这个函数对象的结果与执行一个普通函数的结果一样。
lambda函数比普通函数更简洁,且没有声明函数名,上面的代码是用一个变量来接收lambda函数返回的函数对象,并不是lambda函数的名字。
3.匿名函数的多种形式
#无参数
lambda_a = lambda :1001
print(lambda_a())
#一个参数
lambda_b = lambda b : b * 10
print(lambda_b(10))
#多个参数
lambda_c = lambda a,b,c : a+b+c
print(lambda_c(5,6,7))
#表达式
lambda_d = lambda x: x if x % 2 ==0 else x+1
print(lambda_d(5))
print(lambda_d(6))
运行结果:
1001
100
18
6
6
lambda的参数可以是0个或多个,并且返回的表达式可以是一个复杂的表达式,只要最后返回的是一个值就可以了;
4.lambda作为一个参数传递
def sub_func(a,b,func):
print('a = ',a)
print('b = ',b)
print('a + b = ',func(a,b))
sub_func(12,5,lambda a,b:a+b)
运行结果:
a = 12
b = 5
a + b = 17
5.lambda函数与python内置函数配合使用
#匿名函数与max()函数配合使用
list1 = [{'a':10, 'b':20},{'a':13,'b': 2},{'a':23,'b':13},{'a':32,'b':17}]
m = max(list1,key=lambda x :x['a'])
print('列表最大数:',m)
运行结果:
列表最大数: {'a': 32, 'b': 17}
6.lambda作为函数的返回值
def ret_func(a,b):
return lambda c : a + b + c
return_func = ret_func(50, 51)
print(return_func)
print(return_func(4))
运行结果:
. at 0x000001711D2B8400>
105
匿名函数可以作为一个函数的返回值,在如上代码中,ret_func返回的是一个匿名函数,返回的是一个函数对象,当执行这个函数时,可以得到lamdba函数的结果。
注意:其中a,b两个参数是ret_func中的参数,但执行返回的函数return_func时,已经不在ret_func的作用域内,而lambda函数仍然能使用a,b,参数,说明lambda函数会将它的运行环境保存一份,一直保留到它自己执行的时候使用。
7.匿名函数的优点
- 使用Python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更精简;
- 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名称也是个难题,使用lambda不需要考虑命命名问题;
- 使用lambda在某些时候代码更容易理解