匿名函数(lambda)是只用一次的简单函数的便捷写法,典型场景是作为回调或 key 函数传入高阶函数。
常见使用场景:
- 排序自定义 key:
sorted(users, key=lambda u: u.age),或按多字段排序key=lambda u: (u.dept, -u.salary)。 - map/filter/reduce:
list(map(lambda x: x * x, nums))、filter(lambda x: x > 0, nums)。不过在 Python 中列表推导式[x * x for x in nums]通常更可读,是更推荐的写法。 - 作为回调:GUI 事件绑定、异步回调等。
- 构造简单函数工厂或延迟求值:如
defaultdict(lambda: 0)、functools.partial的轻量替代。
关键点:lambda 只能包含一个表达式,不能写语句和注解;逻辑稍复杂就应改用 def 定义具名函数,可读性和可测试性更好。易错点是循环中闭包捕获变量:funcs = [lambda: i for i in range(3)] 三个函数都返回 2,需用默认参数 lambda i=i: i 固定值。追问方向:lambda 与 def 的区别、闭包捕获机制。