Lambda
以下是一份 最清晰、最全面、最实战的 Python λ(lambda)指南,适合快速理解 + 实战应用。
lambda 是 Python 的匿名函数(没有名字的函数)
常写法:
lambda 参数: 表达式
它等价于:
def func(参数):
return 表达式
| 特点 | 说明 |
|---|---|
| 匿名 | 不需要用 def 定义 |
| 一行表达式 | 只能写 单表达式,不能写多行 |
| 快速 | 常用于简短逻辑 |
| 常与 map/filter/sorted 等搭配 |
add = lambda x, y: x + y
print(add(1, 2)) # 3
等价于:
def add(x, y):
return x + y
按长度排序字符串:
names = ["aaa", "b", "cccc"]
sorted(names, key=lambda s: len(s))
按对象字段排序:
users = [
{"name": "A", "age": 20},
{"name": "B", "age": 18},
]
sorted(users, key=lambda x: x["age"])
nums = [1, 2, 3, 4, 5]
odd = list(filter(lambda x: x % 2 == 1, nums))
# [1, 3, 5]
nums = [1, 2, 3]
doubled = list(map(lambda x: x * 2, nums))
# [2, 4, 6]
from functools import reduce
nums = [1, 2, 3, 4]
total = reduce(lambda x, y: x + y, nums)
# 10
例如按钮点击:
button.on_click(lambda: print("clicked"))
作为参数传给另一个函数:
def apply(func, x):
return func(x)
apply(lambda v: v * 10, 5) # 50
adder = lambda x: lambda y: x + y
add_10 = adder(10)
add_10(5) # 15
funcs = [lambda x=i: x * 2 for i in range(5)]
[fn() for fn in funcs] # [0, 2, 4, 6, 8]
action = {
"add": lambda x, y: x + y,
"mul": lambda x, y: x * y,
}
action["add"](1, 2) # 3
| 对比项 | lambda | def 函数 |
|---|---|---|
| 是否有名字 | 无 | 有 |
| 功能 | 简短表达式 | 多行逻辑 |
| 是否能写 if/for/print 等语句 | ❌ 不行 | ✅ 可以 |
| 是否支持类型注解 | ❌ 不支持 | ✅ 支持 |
| 可读性 | 较差 | 较好 |
结论:
lambda 用于“一行小功能”,复杂逻辑必须使用 def。
错误:
lambda x: (
y = x + 1,
y * 2
)
lambda 中不能出现 =、不能写语句,只能写表达式。
错误示例:
funcs = [lambda: i for i in range(3)]
print([f() for f in funcs]) # [2, 2, 2]
正确:
funcs = [lambda x=i: x for i in range(3)]
建议:
- sorted(key=xxx)
- map/filter/reduce
- 简单回调
- 字典分发表
- 临时小函数
- 任何复杂逻辑
- 需要类型标注的地方
- 需要测试/调试的函数
lambda 是“一行匿名函数”,适合极短逻辑,过长请换成 def,防止代码不可维护。