python
lambda
说明
《Python 教程》 帮助读者成为泛程序员,持续修订中,提供建议、纠错、催更加微信 gairuo123。查看 更新日志。作者开办 Python 数据分析培训,详情 Python 数据分析培训。
![]() |
本教程作者所著新书《Python之光:Python编程入门与实战》(ISBN:9787111729891)已由机械工业出版社出版上市,各大电商平台有售,欢迎:查看详情并关注购买。 |
可以用 lambda 关键字来创建一个匿名函数。lambda 函数可以在需要函数对象的任何地方使用。从语义上来说,它们只是正常函数定义的语法糖。
Lambda( /ˈlæmdə/ 大写Λ,小写λ,中文音译:兰布达),是第十一个希腊字母。1958 年 LISP 首先采用匿名函数(英语:Anonymous Function),自此之后,越来越多编程语言陆续采用。
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 : 1)()
# 1
f = lambda : 1
f()
# 1
# 两个数的最大值
(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 的迭代方法
a = [1, 2, 3, 4, 5, 6]
result = map(lambda x: x+1, a)
list(result)
# [2, 3, 4, 5, 6, 7]
# 作为过虑器的过滤逻辑
a = [1, 2, 3, 4, 5, 6]
result = filter(lambda x: x%2==0, a)
list(result)
from functools import reduce
# 作为 reduce 累积迭代的方法
a = [1, 2, 3, 4, 5, 6]
result = reduce(lambda x, y: x+y, a)
result
# 21
# 指定属性排序
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}]
iter() 函数用来生成迭代器,lambda 中可用 next() 调用:
# 注:x 变量没有用,在一些对象中可用来占位
n = lambda x, y=iter('abcdef'): next(y)
# 可调用 6 次,每次返回其中一个值
n(None) # 'a'
n(None) # 'b'
...
比如,pandas 中修改列名的场景,x 在这儿是列名,但在这儿用不着:
# 利用 iter() 函数的 next 特性修改
df.rename(lambda x, y=iter('abcdef'): next(y), axis=1)
匿名函数是使用 lambda 创建的函数,所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
好处: