6. lambda 表达式
lambda [arg1[, arg2, ... argN]]: expression
- 特性:
匿名函数:函数没有名字。
输入是 arg list,输出是根据 expression 计算得到的值。
功能简单。
6.1. 使用场景
将 lambda 函数赋值给一个变量,通过这个变量间接调用该函数。
1>>> plus = lambda x, y: x+y
2>>> plus(1,2)
33
将 lambda 函数赋值给其他函数,从而屏蔽其他函数本来的功能。
将 lambda 函数作为其他函数的返回值(内部函数)。
将 lambda 函数作为参数传递给其他函数。
map :将序列中的元素通过函数处理后返回一个新的列表。
filter :将序列中的元素通过函数过滤后返回一个新的列表。
reduce :将序列中的元素通过一个二元函数处理返回一个结果。
sorted :结合 lambda 对列表进行排序。
sorted(iterable, cmp=None, key=None, reverse=False)
1>>> a = [1, 2, 6, 5, 2, -8, -5, -1, -10]
2
3## 每个元素加1
4>>> b = map(lambda x: x+1, a) # [2, 3, 7, 6, 3, -7, -4, 0, -9]
5
6## 提取序列中大于0的数
7>>> c = filter(lambda x: x>0, a) # [1, 2, 6, 5, 2]
8
9## 返回所有元素相乘的结果
10>>> d = reduce(lambda x, y: x*y, a) # 48000
11## 返回所有元素的平方和
12>>> e = reduce(lambda x, y: x+y*y, [0] + a)
13
14## 负数排在正数前面,同时绝对值大的排在后面
15## 两个key,先按第一个key排序,若第一个key相同则按下一个key排序
16>>> f = sorted(a, key=lambda x:(x>0, abs(x))) # [-1, -5, -8, -10, 1, 2, 2, 5, 6]
Note
在 Python3 中,map 和 filter 返回的不再是列表,而是对应的 map object 和 filter object,需要手动转化为列表。 reduce 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里:
from functools import reduce
6.2. 参考资料
关于Python中的lambda,这可能是你见过的最完整的讲解
在Python中使用lambda高效操作列表的教程