Python 依赖于iterables的函数

Python 依赖于iterables的函数,python,function,Python,Function,我希望它打印[0,1,2],而不是打印[2,2,2]。我知道发生了什么,问题是我如何绕过这一点?这一行: funcs = [] for i in range(3): a = i func = lambda x: a funcs.append(func) print [func(0) for func in funcs] 声明您希望函数返回a,无论您传递它什么 因此,当您使用参数0调用函数时,它将返回a的值。从for循环退出后为2 要避免这种情况,您需要将lambda函

我希望它打印
[0,1,2]
,而不是打印
[2,2,2]
。我知道发生了什么,问题是我如何绕过这一点?

这一行:

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

print [func(0) for func in funcs]
声明您希望函数返回
a
,无论您传递它什么

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

要避免这种情况,您需要将lambda函数更改为:

func = lambda x: a
并更改以下行:

func = lambda x: x
致:


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

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

print [func(x) for x in range(3)]
输出:

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

我如何扩展它,使我附加到列表中的每个函数的输出都依赖于可说出的语句?
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]