函数取决于iterables

时间:2014-09-17 02:20:45

标签: python function

funcs = []
for i in range(3):
    a = i
    func = lambda x: a
    funcs.append(func)

print [func(0) for func in funcs]

我希望打印[0,1,2],而不是打印[2,2,2]。我知道发生了什么,问题是如何规避这个?

2 个答案:

答案 0 :(得分:3)

您可以使用关键字参数将a绑定到lambda的本地范围来解决此问题:

funcs = []
for i in range(3):
    a = i
    func = lambda x, a=a: a
    funcs.append(func)
print [func(0) for func in funcs]

输出:

[0, 1, 2]

答案 1 :(得分:0)

这一行:

func = lambda x: a

声明您希望函数返回a,无论您传递的是什么。

因此,当您使用参数0调用函数时,它将返回a的值。从for循环退出后,2为。{/ p>

规避您需要将lambda函数更改为:

func = lambda x: x

并更改以下行:

print [func(0) for func in funcs]

为:

print [func(x) for x in range(3)]

或者按照@dano的建议将a绑定到lambda的本地范围。