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]
。我知道发生了什么,问题是如何规避这个?
答案 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的本地范围。