python 的 Lambda 是创建单表达式匿名函数的快捷方式,用于高阶函数参数等场景,但受限于无语句、不可多行、调试困难等,复杂逻辑应使用普通函数。

Python 的 lambda 是创建小型匿名函数的快捷方式,它不使用 def 关键字,也没有函数名,适合在需要一个简单函数但又不想正式定义时使用——比如作为参数传给 map()、Filter()、sorted() 等高阶函数。
lambda 的基本语法和限制
lambda 表达式写法为:lambda 参数列表: 表达式。它只能包含一个表达式(不能是语句,如 if、for、return),且自动返回该表达式结果。
-
lambda x: x * 2等价于def f(x): return x * 2 -
lambda x, y: x + y接收两个参数,返回和 - 不能写多行逻辑,也不能直接赋值或调用 print;若需复杂逻辑,应改用普通函数
在高阶函数中高效使用 lambda
lambda 最常见用途是配合内置高阶函数,让代码更紧凑可读。
- filter():筛选满足条件的元素
numbers = [1, 2, 3, 4, 5]
evens = list(filter(lambda x: x % 2 == 0, numbers)) # [2, 4] - map():对每个元素做变换
squares = list(map(lambda x: x ** 2, numbers)) # [1, 4, 9, 16, 25] - sorted():按自定义规则排序
fruits = [('apple', 3), ('banana', 1), ('cherry', 2)]
by_count = sorted(fruits, key=lambda x: x[1]) # 按元组第二个元素升序
lambda 和闭包:捕获外部变量的技巧
lambda 可以引用其定义时所在作用域的变量,形成闭包。注意变量是“后期绑定”的,循环中直接引用循环变量可能出乎意料。
立即学习“Python免费学习笔记(深入)”;
- 正确捕获当前值(常用技巧):
funcs = [lambda x, i=i: x + i for i in range(3)]
print([f(10) for f in funcs]) # [10, 11, 12] - 错误写法(所有 lambda 共享最后的 i 值):
funcs = [lambda x: x + i for i in range(3)]
print([f(10) for f in funcs]) # [12, 12, 12]
何时不该用 lambda?保持可读性的底线
lambda 不是越短越好,可读性优先。以下情况建议用普通函数:
- 逻辑超过一行,比如含条件分支或异常处理
- 函数会被多次复用,命名能提升语义清晰度
- 需要文档字符串说明用途或参数含义
- 调试困难:lambda 在 traceback 中显示为
,不如函数名直观
不复杂但容易忽略。