考虑这个例子
def dump(value):
print value
items = []
for i in range(0, 2):
items.append(lambda: dump(i))
for item in items:
item()
输出:
1
1
我怎样才能得到:
0
1
您可以在 lambda 上使用具有默认值的参数:
for i in range(0, 2):
items.append(lambda i=i: dump(i))
这是有效的,因为默认值是在定义函数时评估的,而不是在调用它时。
您可以使用:
for i in range(0, 2):
items.append(lambda i=i: dump(i))
捕获的当前值i
这是因为默认参数值是在函数创建时评估的,i
它不是外部变量,而是一个函数参数,它将具有您想要的默认值。
更详细的解释可以在这个答案中找到。
为了完整起见,您还可以执行以下操作:
for i in range(0, 2):
items.append((lambda i: lambda: dump(i))(i))
输出值是 i 在函数评估时的值,而不是在其声明时的值。这就是为什么你没有得到想要的结果。