Heim >Backend-Entwicklung >Python-Tutorial >Warum wirkt sich der Umfang von Lambda-Funktionen auf deren Ausgabe in Python aus?
Umfang von Lambda-Funktionen und ihren Parametern
In Python stellen Lambda-Funktionen eine Kurznotation zum Definieren von Inline-Funktionen bereit. Ihr Umfang und ihre Parameterbehandlung können jedoch zu unerwartetem Verhalten führen, wie der folgende Code zeigt:
def callback(msg): print msg # Iterative Approach funcList = [] for m in ('do', 're', 'mi'): funcList.append(lambda: callback(m)) for f in funcList: f() # Individual Creation funcList = [] funcList.append(lambda: callback('do')) funcList.append(lambda: callback('re')) funcList.append(lambda: callback('mi')) for f in funcList: f()
Die erwartete Ausgabe ist:
do re mi do re mi
Die tatsächliche Ausgabe ist jedoch:
mi mi mi do re mi
Dieses Verhalten ist auf die Tatsache zurückzuführen, dass Lambda-Funktionen keine Kopien von Variablen aus dem umschließenden Bereich erstellen. Stattdessen pflegen sie Verweise auf diese Variablen. Infolgedessen wirken sich Änderungen am Wert von m in der Schleife auf alle in dieser Schleife erstellten Lambda-Funktionen aus.
Um dieses Problem zu lösen, ist es üblich, den Wert von m zum Zeitpunkt der Erstellung der Lambda-Funktion zu erfassen indem Sie es als Standardargument eines optionalen Parameters verwenden:
for m in ('do', 're', 'mi'): funcList.append(lambda m=m: callback(m))
Dadurch wird sichergestellt, dass jede Lambda-Funktion den korrekten Wert von m erfasst, was zur gewünschten Ausgabe führt:
do re mi do re mi
Das obige ist der detaillierte Inhalt vonWarum wirkt sich der Umfang von Lambda-Funktionen auf deren Ausgabe in Python aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!