„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie erfasst man Variablen in Lambda-Funktionen ordnungsgemäß in Schleifen?

Wie erfasst man Variablen in Lambda-Funktionen ordnungsgemäß in Schleifen?

Veröffentlicht am 07.11.2024
Durchsuche:397

How to Properly Capture Variables in Lambda Functions in Loops?

Erfassen von Variablen in Lambda-Funktionen

Bei der Verwendung von Lambda-Funktionen innerhalb einer Schleife ist es wichtig, ihren Variablenbereich zu verstehen. Im Gegensatz zu regulären Funktionen, die lokale Variablen kopieren, verweisen Lambda-Funktionen auf diese.

Bedenken Sie den angegebenen Code:

for m in ('do', 're', 'mi'):
    funcList.append(lambda: callback(m))

Hier erfasst die Lambda-Funktion den Wert von m aus dem umschließenden Bereich. Nach Abschluss der Schleife behält m jedoch den letzten Wert („mi“) bei. Wenn jede Lambda-Funktion aufgerufen wird, verweist sie auf diese gemeinsam genutzte m-Variable, was zur Ausgabe „mi“ mehrmals führt.

Um dieses Problem zu lösen und sicherzustellen, dass jedes Lambda einen eindeutigen Wert von m erfasst, verwenden Sie eine Technik namens „ Standardargumente":

for m in ('do', 're', 'mi'):
    funcList.append(lambda m=m: callback(m))

Indem man m zu einem Standardparameter mit demselben Namen macht, erfasst jedes Lambda seine eigene Instanz der Variablen und stellt so die erwartete Ausgabe sicher:

"do"
"re"
"mi"

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729329734 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3