说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
可以用 lambda 关键字来创建一个匿名函数。lambda 函数可以在需要函数对象的任何地方使用。从语义上来说,它们只是正常函数定义的语法糖。
Lambda( /ˈlæmdə/ 大写Λ,小写λ,中文音译:兰布达),是第十一个希腊字母。1958 年 LISP 首先采用匿名函数(英语:Anonymous Function),自此之后,越来越多编程语言陆续采用。
Python 的匿名函数,也称为 lambda 函数,是一种创建小型、简单函数的方式,通常用于需要快速定义一个简单函数的场景。匿名函数使用 lambda 关键字来定义,与常规的 def 关键字定义的函数不同,它没有名称。
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: sum(x))(1,2,3)
# 6
lambda *x: x # 什么都不干
# 两个数的最大值
(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 语句这样标准的形式定义一个函数。
好处:
更新时间:2024-06-03 14:19:20 标签:python lambda