Heim >Backend-Entwicklung >Python-Tutorial >Warum erfassen Lambda-Funktionen in Python-For-Schleifen nur den letzten Wert?
Bei der Verwendung von Lambda-Funktionen innerhalb einer for-Schleife ist der vom Lambda erfasste Wert möglicherweise nicht der beabsichtigte. Dieses Problem entsteht aufgrund der Funktionsweise der Garbage Collection von Python, die dazu führt, dass nur der letzte Wert der Variablen beibehalten wird.
Um dieses Konzept zu veranschaulichen:
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) )
In diesem Code jede Lambda-Funktion sollte einen eindeutigen Wert der Option erfassen, aber alle verhalten sich so, als ob die Option auf „DEBUG“ gesetzt wäre, den letzten Wert, den sie in der Schleife annimmt.
Um dieses Problem zu beheben, Wie in der Lösung vorgeschlagen, muss jede Lambda-Funktion ihre eigene Variable erfassen. Dies kann erreicht werden, indem der Option wie folgt eine neue lokale Variable zugewiesen wird:
for i in range(len(options)): opt = options[i] # Assign a new variable to capture the unique value __cMenu.add_command( label="{}".format(opt), command=lambda: self.filter_records(column, opt) )
Alternativ können Lambda-Ausdrücke wie folgt umgeschrieben werden:
lambda opt=option: self.filter_records(column, opt) # Differentiate loop variable and function parameter
Durch Erfassung der entsprechenden Werte, Lambda-Funktionen können unabhängig innerhalb einer Schleife funktionieren, sodass das beabsichtigte Verhalten erreicht werden kann.
Das obige ist der detaillierte Inhalt vonWarum erfassen Lambda-Funktionen in Python-For-Schleifen nur den letzten Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!