此代码中的后期绑定闭包

时间:2016-10-09 07:54:21

标签: python python-2.7 python-3.x

我遇到了这个代码,这是Python的陷阱之一:

def create_multipliers():
    return [lambda x : i * x for i in range(5)]
for multiplier in create_multipliers():
    print multiplier(2)

我阅读了解决方案here但我在某些地方感到困惑。我有两个问题:

  1. 为什么要打印8,8,8,8,8而不是0,2,4,6,8

  2. 他们提出了这个解决方案

    def create_multipliers():
        return [lambda x, i=i : i * x for i in range(5)]
    

    i=i做什么以及使用它的原因是什么?

0 个答案:

没有答案