Heim >Backend-Entwicklung >Python-Tutorial >Wie aktualisiere ich lokale Variablen korrekt mit der Funktion „exec' von Python?
So aktualisieren Sie lokale Variablen mit exec in Python
Die exec-Funktion in Python ermöglicht die dynamische Ausführung von Code zur Laufzeit. Wenn Sie jedoch exec verwenden, um lokalen Variablen Werte zuzuweisen, können bestimmte Verhaltensweisen unerwartet sein.
Das Problem in Python 3
In Python 3 gibt der folgende Code 1 aus anstelle der erwarteten 3:
def f(): a = 1 exec("a = 3") print(a) f()
Dies liegt daran, dass in Python 3 die exec-Funktion standardmäßig den globalen Namespace ändert. Um lokale Variablen zu ändern, muss ein explizites lokales Wörterbuch bereitgestellt werden.
Lösung in Python 3
Der richtige Weg, lokale Variablen mit exec in Python 3 zu aktualisieren, ist:
def foo(): ldict = {} exec("a = 3", globals(), ldict) a = ldict['a'] print(a)
Python 2 vs. Python 3 Verhalten
In Python 2 verhielt sich der ursprüngliche Code wie erwartet, da davon ausgegangen wurde, dass die exec-Funktion den lokalen Namespace ändern würde. Python 3 hat dieses Verhalten jedoch zu Optimierungszwecken geändert.
Technische Details
In Python 3 werden lokale Variablen normalerweise in einem Array und nicht in einem Wörterbuch gespeichert. Diese Optimierung verhindert den Aufwand für die Pflege eines Wörterbuchs für lokale Variablen. Es schränkt jedoch auch die Fähigkeit von exec ein, lokale Variablen direkt zu ändern.
Durch die Bereitstellung eines expliziten lokalen Wörterbuchs wird die exec-Funktion angewiesen, den Code in diesem Namespace auszuführen, wodurch lokale Variablen aktualisiert werden können.
Fazit
Um lokale Variablen mit exec in Python 3 zu aktualisieren, muss ein explizites Locals-Wörterbuch bereitgestellt werden. Dadurch wird sichergestellt, dass die Änderung im richtigen Namespace erfolgt und unerwartetes Codeverhalten verhindert wird.
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich lokale Variablen korrekt mit der Funktion „exec' von Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!