6

考虑这个例子

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
4

4 回答 4

5

您可以在 lambda 上使用具有默认值的参数:

for i in range(0, 2):
    items.append(lambda i=i: dump(i))

这是有效的,因为默认值是在定义函数时评估的,而不是在调用它时。

于 2012-10-11T12:50:34.420 回答
4

您可以使用:

for i in range(0, 2):
    items.append(lambda i=i: dump(i))

捕获的当前值i

这是因为默认参数值是在函数创建时评估的,i它不是外部变量,而是一个函数参数,它将具有您想要的默认值。

更详细的解释可以在这个答案中找到。

于 2012-10-11T12:50:39.297 回答
1

为了完整起见,您还可以执行以下操作:

for i in range(0, 2):
    items.append((lambda i: lambda: dump(i))(i))
于 2012-10-12T01:36:27.017 回答
0

输出值是 i 在函数评估时的值,而不是在其声明时的值。这就是为什么你没有得到想要的结果。

于 2012-10-11T12:52:02.470 回答