Warum wirkt sich der Umfang von Lambda-Funktionen auf deren Ausgabe in Python aus?

Barbara Streisand
Freigeben: 2024-10-19 17:26:30
Original
944 Leute haben es durchsucht

Why Does the Scope of Lambda Functions Impact Their Output in Python?

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()
Nach dem Login kopieren

Die erwartete Ausgabe ist:

do
re
mi
do
re
mi
Nach dem Login kopieren
Nach dem Login kopieren

Die tatsächliche Ausgabe ist jedoch:

mi
mi
mi
do
re
mi
Nach dem Login kopieren

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))
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!