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))
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!