Heim > Backend-Entwicklung > Python-Tutorial > Warum geben Lambda-Funktionen in Schleifen nur den letzten Wert zurück?

Warum geben Lambda-Funktionen in Schleifen nur den letzten Wert zurück?

DDD
Freigeben: 2024-12-13 14:36:13
Original
443 Leute haben es durchsucht

Why Do Lambda Functions in Loops Only Return the Last Value?

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

Das vorliegende Problem tritt auf, wenn Lambda-Funktionen innerhalb einer for-Schleife verwendet werden, die unterschiedliche Werte erfassen soll einer lokalen Variablen. Es wird jedoch beobachtet, dass diese Lambdas beim Aufrufen konsistent den endgültigen Wert zurückgeben, der der lokalen Variablen zugewiesen ist, auch wenn dieser sich innerhalb der Schleife ändert.

Verstehen des Problems

Dieses verwirrende Verhalten ist auf den Auswertungszeitpunkt von Lambda-Funktionen zurückzuführen. Insbesondere werden die in Lambda-Funktionskörpern verwendeten Namen ausgewertet, wenn die Funktion ausgeführt wird, nicht zum Zeitpunkt ihrer Definition.

Lösung

Um dieses Problem zu beheben, ist es ist wichtig, um den Wert der lokalen Variablen zum Zeitpunkt der Lambda-Definition zu erfassen, nicht wenn sie aufgerufen wird. Ein Ansatz besteht darin, die Variable, die Sie erfassen möchten, als Argument für die Lambda-Funktion zu deklarieren.

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

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

Indem wir „option=option“ vor dem Doppelpunkt setzen, weisen wir den Wert von „option“ explizit als zu ein Argument für die Lambda-Funktion, das sicherstellt, dass jedes Lambda den beabsichtigten Wert erfasst.

Das obige ist der detaillierte Inhalt vonWarum geben Lambda-Funktionen in Schleifen nur den letzten Wert zurück?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage