我写了这段简单的代码:
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)
Thanks in advance