跳到内容

function-uses-loop-variable (B023)

源自 flake8-bugbear linter。

作用

检查使用循环变量的函数定义。

为什么这不好?

循环变量未绑定在函数定义中,因此在调用函数时,它将始终具有在最后一次迭代中的值。

相反,考虑使用默认参数在函数定义时绑定循环变量。或者,使用 functools.partial

示例

adders = [lambda x: x + i for i in range(3)]
values = [adder(1) for adder in adders]  # [3, 3, 3]

建议改为

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]

参考