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"
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