Python · Verständnis von [lambda x: x*i für i in range(4)]

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 

Ich denke du magst

Origin blog.csdn.net/qq_37865996/article/details/124311407
Empfohlen
Rangfolge