列表中的lambda函数如何工作:Python?

时间:2016-11-09 00:22:47

标签: python list lambda

我有一个下面列出的代码。我不知道为什么回报应该是4

def create_multiplier():
    return [lambda x: x*i for i in range(10)]
f = create_multiplier()
print f[1](1) 

结果结果是4.我熟悉lambda函数,比如lambda x:x * 2,但对此非常困惑。例如,它似乎得到了i的最后一次迭代:

   for i in range(5):
       i
   print i 

1 个答案:

答案 0 :(得分:4)

在Python中,当外部函数结束时,闭包变量的值被冻结,而不是在创建内部函数时。是的,它使用i的最后一个值。为避免这种情况,您可以使用默认参数:

return [lambda x, i=i: x*i for i in range(10)]

编辑:作为评论说明,闭包变量在技术上并未冻结,只是在你的情况下没有任何改变它的方法。但还有其他情况可以改变。