Ich schrieb diesen einfachen Code:Python umgebenden Gültigkeitsbereich Variablen mit Lambda-Funktion
def makelist():
L = []
for i in range(5):
L.append(lambda x: i**x)
return L
ok, jetzt nenne ich
mylist = makelist()
weil der umschließenden Umfang Variable wird nachgeschlagen, wenn die verschachtelte Funktionen später sind aufgerufen Sie erinnern sich alle an den gleichen Wert: deshalb erwartete ich, den Wert zu finden, den die Schleifenvariable bei der letzten Schleifeniteration hatte, aber wenn ich meine Liste überprüfe, sehe ich:
>>> mylist[0](0)
1
>>> mylist[0](1)
4
>>> mylist[0](2)
16
>>>
Ich bin so verwirrt, warum mein Code die letzten for-Schleife Werte nicht behält? Warum muss ich behalten nicht explizit Umfang Werte mit Standardargumenten wie diese umschließenden:
L.append(lambda x, i=i: i ** x)
Vielen Dank im Voraus