lambda 表达式,又称匿名函数,即,函数没有具体的名称,常用来表示内部仅包含 1 行表达式的函数。
使用 lambda 编写的代码更加简洁紧凑,但是 lambda 函数支持的功能却是十分有限的,目前 PEP8 已经不建议使用 lambda,而是推荐使用 def 去定义一个函数,即便如此,作为 Python 程序员,认识和了解该匿名函数还是有必要的。
lambda 的语法:lambda argument(s):expression
lambda 函数可以有很多个参数,但是只能有一个表达式。lambda 操作符不能有任何声明,它返回一个函数对象,可以将此函数对象赋值给任何变量。
lambda 函数简单示例:
lambda x, y: x * y # 函数输入是 x 和 y,输出是它们的积 x*y
lambda:None # 函数没有输入参数,输出是 None
>>> a = lambda x: x+1
>>> a(1)
2
# 用 def 函数表示如下:
>>> def a(x):
return x+1
>>> a(1)
2
lambda 函数与 def 的主要不同点:
lambda 函数的优势:
lambda 函数经常用于一些内置函数中:
map()
函数:遍历序列,对序列中每个元素进行操作,此时 lambda 函数用于指定对列表中每一个元素的共同操作条件。
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7 ,8]
>>> list3 = map(lambda a, b: a + b, list1, list2) # 将两个列表中对应的元素相加
>>> print(list3)
<map object at 0x000001EA57C07780>
>>> print(list(list3))
[6, 8, 10, 12]
filter()
函数:对于序列中的元素进行筛选操作,此时 lambda 函数用于指定过滤列表元素的条件。
>>> list1 = [1, 2, 3, 4]
>>> list2 = filter(lambda a: a > 2, list1) # 筛选出列表中大于 2 的元素
>>> print(list2)
<filter object at 0x000001EA57C07898>
>>> print(list(list2))
[3, 4]
reduce()
函数:对于序列中所有元素进行累积操作,此时 lambda 函数用于指定列表中两两相邻元素的累积条件。
>>> from functools import reduce
>>> list1 = [1, 2, 3, 4]
>>> list2 = reduce(lambda a, b: a + b, list1) # 两两相邻元素进行相加操作
>>> print(list2)
10
>>> list2 = reduce(lambda a, b: a * b, list1) # 两两相邻元素进行相乘操作
>>> print(list2)
24
sorted()
函数:对于序列中的元素进行排序操作,此时 lambda 函数用于指定对列表中所有元素进行排序的条件。
>>> list1 = [1, 2, 3, 4, 5, 6, 7, 8]
>>> list2 = sorted(list1, key = lambda a: abs(4-a)) # 将列表元素按照与 4 的距离从小到大进行排序
>>> print(list2)
[4, 3, 5, 2, 6, 1, 7, 8]
其他资料:《不要在Python中编写 lambda 表达式了,不建议大家使用它》