Heim > Backend-Entwicklung > Python-Tutorial > Warum erfassen Python-Lambda-Funktionen den Endwert einer Schleifenvariablen und wie kann dies behoben werden?

Warum erfassen Python-Lambda-Funktionen den Endwert einer Schleifenvariablen und wie kann dies behoben werden?

Susan Sarandon
Freigeben: 2024-12-20 03:26:09
Original
480 Leute haben es durchsucht

Why Do Python Lambda Functions Capture the Final Value of a Loop Variable, and How Can This Be Fixed?

Verstehen der Schließungserfassung in Lambda-Funktionen

Lambda-Funktionen, ein übersichtliches und praktisches Werkzeug in der Programmierung, ermöglichen die Speicherung anonymer Funktionen in Schließungen. In Python erfassen Abschlüsse den umschließenden Bereich, um Zugriff auf externe Variablen zu erhalten, aber dieses Verhalten kann manchmal überraschend sein.

Stellen Sie sich ein Szenario vor, in dem eine Reihe von Lambda-Funktionen innerhalb einer Schleife initialisiert werden, um eine bestimmte Zahl hinzuzufügen ihren Beitrag. Intuitiv könnte man erwarten, dass diese Funktionen den Wert der Schleifenvariablen zum Zeitpunkt ihrer Erstellung beibehalten. Das tatsächliche Ergebnis ist jedoch anders – alle Lambda-Funktionen erfassen den Endwert der Schleifenvariablen.

Dies geschieht, weil Abschlüsse in Python den umschließenden Bereich erfassen, nicht die Verweise auf bestimmte Variablen oder Objekte. Mit anderen Worten: Die Lambda-Funktionen betten effektiv einen Verweis auf die Schleifenvariable i ein, die sich im Verlauf der Schleife ändert. Wenn eine dieser Funktionen aufgerufen wird, verwenden sie folglich den Endwert von i, was zu unerwarteten Ausgaben führt.

Werterfassung in Lambda-Funktionen erzwingen

Um dies zu umgehen Um den beabsichtigten Wert der Schleifenvariablen auszugeben und zu erfassen, muss die Erfassung mithilfe eines Parameters mit einem Standardwert erzwungen werden. Indem Sie die Variable einem Parameter innerhalb der Lambda-Funktion zuweisen und einen Standardwert ihres beabsichtigten Werts bereitstellen, ist es möglich, das gewünschte Erfassungsverhalten beizubehalten.

Beispiel:

# Initialize an array of lambda functions
adders = [None, None, None, None]

# Create lambda functions with forced capture of i
for i in [0, 1, 2, 3]:
    adders[i] = lambda a, i=i: i + a

# Call a lambda function with input
print(adders[1](3))  # Output: 4
Nach dem Login kopieren

Fazit

Durch das Verständnis des Erfassungsmechanismus in Lambda-Funktionen und die Verwendung dieser Technik ist eine Steuerung möglich Die von Abschlüssen erfassten Werte stellen das gewünschte Verhalten bei der Codeausführung sicher.

Das obige ist der detaillierte Inhalt vonWarum erfassen Python-Lambda-Funktionen den Endwert einer Schleifenvariablen und wie kann dies behoben werden?. 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