Heim >Backend-Entwicklung >Python-Tutorial >Warum erfassen Lambda-Funktionen in Python-For-Schleifen nur den letzten Wert?

Warum erfassen Lambda-Funktionen in Python-For-Schleifen nur den letzten Wert?

Linda Hamilton
Linda HamiltonOriginal
2024-12-06 02:29:10454Durchsuche

Why Do Lambda Functions in Python For Loops Only Capture the Last Value?

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

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!

Stellungnahme:
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