6. lambda 表达式

lambda [arg1[, arg2, ... argN]]: expression
特性:
  • 匿名函数:函数没有名字。

  • 输入是 arg list,输出是根据 expression 计算得到的值。

  • 功能简单。

6.1. 使用场景

  1. 将 lambda 函数赋值给一个变量,通过这个变量间接调用该函数。

1>>> plus = lambda x, y: x+y
2>>> plus(1,2)
33
  1. 将 lambda 函数赋值给其他函数,从而屏蔽其他函数本来的功能。

  2. 将 lambda 函数作为其他函数的返回值(内部函数)。

  3. 将 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 中,mapfilter 返回的不再是列表,而是对应的 map object 和 filter object,需要手动转化为列表。 reduce 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里:

from functools import reduce

6.2. 参考资料

  1. 关于Python中的lambda,这可能是你见过的最完整的讲解

  1. 在Python中使用lambda高效操作列表的教程