跳转至

Python3 lambda

概念与用途

lambda 创建只包含一个表达式的匿名函数,适合作为 sorted()、min()、map() 等 API 的短小回调。复杂业务逻辑应使用具名函数,以便测试、注释和复用。

核心语法

形式为 lambda 参数: 表达式,表达式结果自动作为返回值。lambda 支持默认参数和关键字参数,但不能包含普通赋值、try 或多条语句。

users = [
    {"name": "Alice", "score": 88},
    {"name": "Bob", "score": 95},
    {"name": "Carol", "score": 88},
]
ordered = sorted(users, key=lambda user: (-user["score"], user["name"]))
print(ordered)

规则与替代方案

需求 推荐 原因
简单排序字段 lambda/itemgetter 就地可读
多步计算 def 可测试和注释
重复使用 def 有稳定名称
仅调用方法 methodcaller 表意明确

示例:修复循环晚绑定

wrong = [lambda: value for value in range(3)]
fixed = [lambda value=value: value for value in range(3)]
print([function() for function in wrong])
print([function() for function in fixed])

第一个列表中的函数都在调用时读取同一个循环变量,第二个列表通过默认参数在创建时绑定值。更复杂的工厂应使用具名函数,避免依赖这一技巧。

常见错误与工程注意

  • lambda 过长会降低可读性,不能因为“少一行”而隐藏复杂规则。
  • 循环中创建 lambda 会晚绑定变量,可用默认参数绑定当前值。
  • 已有 operator.itemgetter() 或具名函数时,通常比 lambda 更清楚。