Python 的 lambda 是定义匿名函数的简洁方式,仅支持单表达式、不可含语句或赋值,常用于 map/filter/sorted 等高阶函数;适用简单一次性逻辑,复杂或复用场景应使用 def。

Python 的 lambda 是定义匿名函数的简洁方式,适用于简单、一次性使用的逻辑,常与 map()、filter()、sorted() 等高阶函数配合,是函数式编程的重要基础。
lambda 的基本语法和限制
lambda 表达式格式为:lambda 参数: 表达式。它只能包含一个表达式,**不能写语句**(如 if、for、return),也不能包含赋值操作(如 a = 1)。
例如:
-
square = lambda x: x ** 2→ 等价于def square(x): return x ** 2 -
add = lambda a, b: a + b→ 支持多个参数 -
always_true = lambda _: True→ 可用下划线表示忽略参数
lambda 在函数式工具中的典型用法
它真正发挥作用的场景,是作为其他函数的参数传递,实现“行为即数据”。
立即学习“Python免费学习笔记(深入)”;
-
list(map(lambda x: x.upper(), ['a', 'b', 'c']))→['A', 'B', 'C'] -
list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4]))→[2, 4] -
sorted([('Alice', 85), ('Bob', 92), ('Charlie', 78)], key=lambda x: x[1])→ 按分数排序
何时该用 lambda,何时该写普通函数?
核心判断标准是:逻辑是否足够简单、是否只用一次、是否影响可读性。
- 适合 lambda:单运算(
x * 2)、简单条件(x > 0)、临时键函数(key=lambda d: d['age']) - 不适合 lambda:需要多步计算、含异常处理、逻辑稍复杂(比如带
if-else分支但可改写为三元表达式除外)、会被复用 - 注意:
lambda x: x if x > 0 else 0合法(三元表达式是表达式),但lambda x: if x > 0: return x会报错
常见误区与注意事项
lambda 容易被误用或误解,几个关键点需留意:
- 闭包陷阱:lambda 中引用外部变量时,捕获的是变量名,不是定义时的值。循环中创建多个 lambda,可能都指向最后一个值
- 调试困难:lambda 没有函数名,报错时堆栈信息显示为
<lambda>,不利于定位 - 不要强行替代普通函数:可读性优先。写成
def get_name(user): return user.get('name', '')比lambda u: u.get('name', '')更清晰,尤其在多人协作中









