function-uses-loop-variable (B023)
源自 flake8-bugbear linter。
作用
检查使用循环变量的函数定义。
为什么这不好?
循环变量未绑定在函数定义中,因此在调用函数时,它将始终具有在最后一次迭代中的值。
相反,考虑使用默认参数在函数定义时绑定循环变量。或者,使用 functools.partial
。
示例
建议改为
adders = [lambda x, i=i: x + i for i in range(3)]
values = [adder(1) for adder in adders] # [1, 2, 3]
或者
from functools import partial
adders = [partial(lambda x, i: x + i, i=i) for i in range(3)]
values = [adder(1) for adder in adders] # [1, 2, 3]