This question already has answers here:
Python lambda doesn't remember argument in for loop [duplicate]

(3个答案)


已关闭6年。




我努力使 lambdas 工作。这里的代码是示例,但它很好地显示了我的问题。
lambdas = list()

for i in range(5):
    lambdas.append(lambda x:i*i*x)


print lambdas[0](1)
print lambdas[2](1)

这给了我 16,但我希望对不同的 lambda 有不同的值(value)。为什么会发生!

最佳答案

在这段代码中:

for i in range(5):
    lambdas.append(lambda x:i*i*x)
i 的值是在函数运行时确定的。函数定义时 i 的值丢失。

改用:
lambdas = list()

for i in range(5):
    lambdas.append(lambda x, i=i : i*i*x)

print lambdas[0](1)
print lambdas[2](1)

这将产生:
0
4

这是有效的,因为作为一种特殊情况,函数的默认参数(如上面的 i=i 中)会立即绑定(bind)。

关于python - 为什么我的 lambdas 不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29245710/

10-12 18:41