了解Python的闭包

时间:2019-01-05 11:08:59

标签: python

我很难理解下面的代码是如何工作的。

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”的默认聚合来解决问题并为我们提供预期的输出?

0 个答案:

没有答案