【发布时间】:2017-04-21 04:47:52
【问题描述】:
我写了这个简单的代码:
def makelist():
L = []
for i in range(5):
L.append(lambda x: i**x)
return L
好的,现在我打电话
mylist = makelist()
因为稍后调用嵌套函数时会查找封闭范围变量,所以它们都有效地记住了相同的值: 因此,我希望找到循环变量在最后一次循环迭代中的值,但是当我检查我的列表时,我看到:
>>> mylist[0](0)
1
>>> mylist[0](1)
4
>>> mylist[0](2)
16
>>>
我很困惑,为什么我的代码没有保留最后一个 for 循环值?为什么我不必使用这样的默认参数显式保留封闭范围值:
L.append(lambda x, i=i: i ** x)
提前致谢
【问题讨论】:
标签: python list for-loop lambda