可以用 lambda 关键字来创建一个匿名函数。lambda 函数可以在需要函数对象的任何地方使用。从语义上来说,它们只是正常函数定义的语法糖。
名词
Lambda( /ˈlæmdə/ 大写Λ,小写λ,中文音译:兰布达),是第十一个希腊字母。1958 年 LISP 首先采用匿名函数(英语:Anonymous Function),自此之后,越来越多编程语言陆续采用。
语法结构
lambda <变量>: <逻辑表达式代码>
说明:
- 变量可以一个,也可以多个用逗号隔开,这个变量会用在后边逻辑代码里使用
- 变量后边紧跟着冒号,冒号后边为逻辑代码
- 逻辑代码的计算结果为 lambda 的返回值
实例
add = lambda x,y: x+y
add(1,4)
# 5
上例中利用 lambda
定义 x 和 y 两个变量,逻辑为把这两个变量相加并返回,再把这个匿名函数赋值给 add
, 最后我们就可以把 add
当做一个普通的函数去调用。
当然,我们也可以不用赋值变量,即时定义即时使用调用,如下:
(lambda x,y: x+y)(3,5)
# 8
可以认为 lambda
是一个不需要起名的快捷函数,可以随时定义随时使用。
其他使用
条件判断
# 两个数的最大值
(lambda x,y: x if x>y else y )(49,5)
# 49
和字典结合
# 可以定义在字典的值里,用 key 来调用
d = {'+': lambda x,y: x+y, '-': lambda x,y: x-y}
d['+'](3, 8)
# 11
map
# 作为 map 的迭代方法
a = [1, 2, 3, 4, 5, 6]
result = map(lambda x: x+1, a)
list(result)
# [2, 3, 4, 5, 6, 7]
filter
# 作为过虑器的过滤逻辑
a = [1, 2, 3, 4, 5, 6]
result = filter(lambda x: x%2==0, a)
list(result)
reduce
from functools import reduce
# 作为 reduce 累积迭代的方法
a = [1, 2, 3, 4, 5, 6]
result = reduce(lambda x, y: x+y, a)
result
# 21
sorted
# 指定属性排序
s = [{'name': 'tom', 'age': 22},
{'name': 'lily', 'age': 19},
{'name': 'lucy', 'age': 20}]
sorted(s, key=lambda x: x['age'])
# [{'name': 'lily', 'age': 19},
# {'name': 'lucy', 'age': 20},
# {'name': 'tom', 'age': 22}]
注:我将开始编写《Python 教程》将在我的个人网站https://www.gairuo.com同步连载更新,欢迎关注。