def multipliers(): return [lambda x: i * x for i in range(4)]
print([m(1) for m in multipliers()]) # [3, 3, 3, 3]
为什么不是[0, 1, 2, 3]呢?听不懂 那么,由于某种原因,我们i = 3所有的lambda中都有?为什么?
[0, 1, 2, 3]
i = 3
这是因为Python的后期绑定关闭。您可以通过以下方式解决此问题:
def multipliers(): return [lambda x, i=i : i * x for i in range(4)]