考虑这个例子
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
答案 0 :(得分:5)
您可以在lambda上使用带有默认值的参数:
for i in range(0, 2):
items.append(lambda i=i: dump(i))
这是有效的,因为默认值是在定义函数时计算的,而不是在调用函数时计算的。
答案 1 :(得分:4)
您可以使用:
for i in range(0, 2):
items.append(lambda i=i: dump(i))
捕获i
这是有效的,因为默认参数值是在函数创建时计算的,而i
不是外部变量,而是一个函数参数,它将具有您想要的默认值。
可在此answer中找到更详细的说明。
答案 2 :(得分:1)
为了完整起见,您还可以:
for i in range(0, 2):
items.append((lambda i: lambda: dump(i))(i))
答案 3 :(得分:0)
输出值是在评估函数时的i值,而不是在其声明中。这就是为什么你没有得到理想的结果。