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