Heim > Backend-Entwicklung > Python-Tutorial > Warum verwenden meine Lambdas in einer For-Schleife nur den letzten Wert?

Warum verwenden meine Lambdas in einer For-Schleife nur den letzten Wert?

Mary-Kate Olsen
Freigeben: 2024-12-18 06:17:10
Original
229 Leute haben es durchsucht

Why Do My Lambdas in a For Loop Only Use the Last Value?

Lambda in der For-Schleife nimmt nur den letzten Wert an

Im folgenden Code:

options=["INFO", "WARNING", "DEBUG"]

for i in range(len(options)):
    option=options[i]
    __cMenu.add_command(
        label="{}".format(option), 
        command=lambda: self.filter_records(column, option)
   )
Nach dem Login kopieren

werden mehrere Lambdas erstellt und gespeichert. Diese Lambdas sollten unterschiedliche Werte der lokalen Variablenoption erfassen. Wenn diese Lambdas jedoch verwendet werden, verhalten sie sich alle so, als ob die Option auf „DEBUG“ gesetzt wäre, den letzten Wert, den sie in der Schleife annimmt.

Dieses Problem entsteht aufgrund des Auswertungszeitpunkts von Namen in Funktionskörpern . Im bereitgestellten Code werden die Namen ausgewertet, wenn die Funktion ausgeführt wird. Infolgedessen verweisen die in der Schleife erstellten Lambdas alle zum Zeitpunkt der Ausführung auf denselben Optionswert, nämlich „DEBUG“.

Um dieses Problem zu umgehen, kann die folgende Änderung vorgenommen werden:

__cMenu.add_command(label="{}".format(option),
    command=lambda opt=option: self.filter_records(column, opt))
Nach dem Login kopieren

Durch die Einführung von option=option als Argument für die Lambda-Funktion erfasst jedes Lambda den korrekten Wert der Option zum Zeitpunkt der Erstellung, anstatt sich auf den Wert zum Zeitpunkt der Ausführung zu verlassen. Dadurch wird sichergestellt, dass jedes Lambda mit dem gewünschten Wert der Option arbeitet.

Das obige ist der detaillierte Inhalt vonWarum verwenden meine Lambdas in einer For-Schleife nur den letzten Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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