Python Lambda的使用
一、Lambda的直观含义
上面是Python里面Lambdas文档的截图,划个重点,就是简洁的匿名函数
原先的函数如下:
def <lambda>(arguments):
return expression
通过Lambda表达式,可以简化成如下形式:
"lambda" [parameter_list]: expression
二、直接定义Lambda
- 单个参数的情况
f = lambda x: -x
print(f(2))
print(f(-3))
我们直接定义了一个lambda函数,输入x,返回x的负数
输出为
-2
3
- 多个参数的情况
正如一个函数有多个参数,lambda函数同样可以有多个参数
f = lambda x, y: x * y
print(f(2, 3))
print(f(-3, -3))
输出为
6
9
- 多个返回值的情况
lambda函数可以有多个返回值,不过返回值需要显示地用tuple来封装
f = lambda x, y: (x * y, x - y)
a, b = f(2, 3)
print(a)
print(b)
这里a对应的是x*y,b对应的是x-y,输出为
6
-1
三、结合其他函数的进阶用法
在此之前,先介绍一下Python中的filter函数
filter函数的形式为filter(Iterator[_T], Generic[_T])
,这其中Iterator是一个函数,Generic是一个可迭代对象,通过filter函数,我们可以有效地过滤出我们想要的内容(即Iterator函数中返回值为True的内容)
举个例子,定义一个list和一个判断是否小于0的函数
nums = [1, -2, -4, 5, 1, -9]
def less_than_0(num):
return num < 0
for i in filter(less_than_0, nums):
print(i)
这里面,less_than_0
是Iterator,即函数;nums
是Generic,即可迭代对象
返回的filter(less_than_0, nums)
是一个filter类的对象,是一个可迭代对象,因此我们可以使用for语句进行遍历,遍历得到的结果是所有的负数
-2
-4
-9
基本的知识讲完了,接下来,进行和lambda相关的讲解
- filter函数
可以看出来,上一个例子还需要单独定义一个less_than_0
函数,来实现这个功能,属于是有些麻烦了。因此,我们使用lambda函数来简化这个式子:
nums = [1, -2, -4, 5, 1, -9]
for i in filter(lambda x: x < 0, nums):
print(i)
可以看出,通过使用lambda表达式,我们使用了一个匿名函数,取代了自己定义less_than_0
函数的步骤,一定程度上简化了我们的操作
- map函数
和filter函数不同,map函数的主要功能是将一个值映射成另一个值,通过函数的关系,对于一个list,如果我们想快速求出这个list的绝对值形式,可以采用lambda函数快速解决:
for i in map(lambda x: abs(x), nums):
print(i)
输出为:
1
2
4
5
1
9
对比下面这种传统的方法,是不是优雅了不少呢?
for i in nums:
print(abs(i))
- sorted函数
sorted函数的形式如下:
key参数是给定一个函数,用于映射可迭代对象中的元素,之后会根据映射后的结果对该可迭代对象进行生序或者降序的排序,很显然,这个key也可以被我们采用lambda表达式来代替
for i in sorted(nums, key=lambda x: abs(x)):
print(i)
上述表达式的作用就是对nums的绝对值形式进行升序的排序,最后的输出结果为:
1
1
-2
-4
5
-9
四、总结
Python中lambda表达式优势主要体现在下面几点:
- 对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁
- 对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能