我还没有使用很多功能性编程核心功能,例如lambda
或map
,但我最近发现它很有用。我正在使用以下lambda函数,但它没有产生所需的结果。
def multiplier():
return [lambda x:x**i for i in range(10)]
print [m(2) for m in multiplier()] #output is [512, 512, 512, 512, 512, 512, 512, 512, 512, 512]
为什么我会出现这种行为?在lambda中,i
关闭列表的最后一个值,即9,因此当我传递参数m(2)时.2 ** 9 = 512被打印。
编辑:
我的确切问题是根据我的理解,最终输出应该是x ** i;我的范围从0到9,在我的例子中x = 2。那么为什么在所有10个循环中只考虑i = 9?
任何人都可以解释为什么会发生这种情况?