我很难理解下面的代码是如何工作的。
def multipliers():
return [lambda x : i * x for i in range(4)]
print [m(2) for m in multipliers()]
输出为[6,6,6,6],但预期输出为[0,2,4,6]。
我需要找到修复此代码的方法,并且我尝试使用IDE调试这段代码,但它对我而言并没有使事情变得更清晰。
为什么输出[6,6,6,6],有人可以指出这个闭包在哪里吗?即使已完成执行,仍会保留“ i”的值的multipliers()吗?
这个问题来自https://www.toptal.com/python/interview-questions 而且那里的解释也令人困惑。
有人可以解释一下在调用m(2)时我如何求值为3,以及如何使用链接中说明的“ i”的默认聚合来解决问题并为我们提供预期的输出?