在python参考思维拼图中的lambda

时间:2012-10-11 12:45:13

标签: python reference lambda

考虑这个例子

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 个答案:

答案 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值,而不是在其声明中。这就是为什么你没有得到理想的结果。