Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Lambda

以下是一份 最清晰、最全面、最实战的 Python λ(lambda)指南,适合快速理解 + 实战应用。

🔥 1. lambda 是什么?

lambda 是 Python 的匿名函数(没有名字的函数)

常写法:

lambda 参数: 表达式

它等价于:

def func(参数):
    return 表达式

🔥 2. lambda 的特点

特点 说明
匿名 不需要用 def 定义
一行表达式 只能写 单表达式,不能写多行
快速 常用于简短逻辑
常与 map/filter/sorted 等搭配

🔥 3. 最简单示例

add = lambda x, y: x + y
print(add(1, 2))  # 3

等价于:

def add(x, y):
    return x + y

🔥 4. lambda 常见使用场景(最重要)

① 排序时使用 key(最常见)

按长度排序字符串:

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"])

② filter() 过滤数据

nums = [1, 2, 3, 4, 5]
odd = list(filter(lambda x: x % 2 == 1, nums))
# [1, 3, 5]

③ map() 映射转换

nums = [1, 2, 3]
doubled = list(map(lambda x: x * 2, nums))
# [2, 4, 6]

④ reduce() 累积计算

from functools import reduce

nums = [1, 2, 3, 4]
total = reduce(lambda x, y: x + y, nums)
# 10

⑤ 在 GUI 或回调中快速定义逻辑

例如按钮点击:

button.on_click(lambda: print("clicked"))

⑥ 与函数式编程结合

作为参数传给另一个函数:

def apply(func, x):
    return func(x)

apply(lambda v: v * 10, 5)  # 50

🔥 5. lambda 的高级用法

① 嵌套 lambda

adder = lambda x: lambda y: x + y
add_10 = adder(10)
add_10(5)  # 15

② lambda + 列表推导式

funcs = [lambda x=i: x * 2 for i in range(5)]
[fn() for fn in funcs]  # [0, 2, 4, 6, 8]

③ lambda + 字典分发(代替 if/else)

action = {
    "add": lambda x, y: x + y,
    "mul": lambda x, y: x * y,
}

action["add"](1, 2)  # 3

🔥 6. lambda 与普通函数的区别

对比项 lambda def 函数
是否有名字
功能 简短表达式 多行逻辑
是否能写 if/for/print 等语句 ❌ 不行 ✅ 可以
是否支持类型注解 ❌ 不支持 ✅ 支持
可读性 较差 较好

结论:

lambda 用于“一行小功能”,复杂逻辑必须使用 def。

🔥 7. lambda 的常见坑

❌ ① 多行不允许

错误:

lambda x: (
    y = x + 1,
    y * 2
)

lambda 中不能出现 =、不能写语句,只能写表达式。

❌ ② 循环中的 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)]

🔥 8. 什么时候应该用 lambda?

建议:

✅ 完全可以用

  • sorted(key=xxx)
  • map/filter/reduce
  • 简单回调
  • 字典分发表
  • 临时小函数

❌ 不应该用

  • 任何复杂逻辑
  • 需要类型标注的地方
  • 需要测试/调试的函数

📌 总结一句话

lambda 是“一行匿名函数”,适合极短逻辑,过长请换成 def,防止代码不可维护。