Thema
lst = [lambda x: x*i for i in range(4)]
res = [m(2) for m in lst]
print res
Diese Frage beinhaltet das Wissen von Python über Closures und Delayed Binding (Python-Geltungsbereich).
In der Core-Python-Programmierung werden Closures wie folgt definiert:
Wenn innerhalb einer inneren Funktion ein Verweis auf eine Variable im äußeren Gültigkeitsbereich (aber nicht im globalen Gültigkeitsbereich) vorhanden ist, wird die innere Funktion als Abschluss betrachtet.
Es lässt sich in drei Punkten zusammenfassen:
1, ist eine Inline-Funktion
2. Verweis auf externe Funktionsvariablen
3. Externe Funktionen geben eingebettete Funktionen zurück
Einfaches Verschlussbeispiel:
def counter(start_at=0):
count = [start_at]
def incr():
count[0] += 1
return count[0]
return incr
Die obige Frage kann wie folgt geschrieben werden:
def func():
fun_list = []
for