闭坑指南 · Python#经典错误 #函数
闭包与晚绑定
循环里定义 lambda 时,变量在调用时才解析。
闭包与晚绑定
循环里:
funcs = [lambda: i for i in range(3)]
三个 lambda 共享同一个 i。循环结束后 i == 2,所以全都返回 2。
修复
- 默认参数绑定当前值:
lambda i=i: i - 用
functools.partial - Python 3 可用生成器/列表推导直接产生结果,不必存 lambda
这是面试高频题,也是装饰器里常见的坑。