Heim >Backend-Entwicklung >Python-Tutorial >Warum aktualisiert exec lokale Variablen in Python 3 nicht und wie kann ich das beheben?
Problem:
Bei Verwendung von exec in Python 3 zum Ausführen Eine Codezeichenfolge innerhalb einer Funktion. Lokale Variablen innerhalb der Funktion werden nicht aktualisiert. Dieses Problem entsteht aufgrund der effizienten Optimierung des lokalen Variablenspeichers durch Python 3.
Beispiel:
def f(): a = 1 exec("a = 3") print(a) f()
Dieser Code soll 3 ausgeben, gibt aber stattdessen 1 aus.
Lösung:
Um lokale Variablen mit exec zu ändern, Es muss ein explizites lokales Wörterbuch übergeben werden. Dies kann wie folgt erreicht werden:
def foo(): ldict = {} exec("a = 3", globals(), ldict) a = ldict['a'] print(a)
Erklärung:
Python 3 speichert lokale Variablen in einem Array, um deren Zugriff zu optimieren. Das Standardverhalten von exec lässt jedoch keine Änderung lokaler Variablen zu. Durch Übergabe eines expliziten lokalen Wörterbuchs können die Variablen dem Wörterbuch zugewiesen werden und über dieses auf ihre geänderten Werte zugegriffen werden.
Python 2 vs. Python 3:
In Python 2 funktionierte dieses Verhalten wie erwartet aufgrund eines Optimierungsmechanismus, der es Funktionen mit exec ermöglichte, über einen nicht optimierten lokalen Variablenspeicher zu verfügen. In Python 3 ist diese Optimierung jedoch nicht mehr möglich, was zu dem beobachteten Verhalten führt.
Hinweis:
Es ist wichtig zu bedenken, dass die Übergabe eines expliziten lokalen Wörterbuchs erfolgen sollte Dies sollte nur bei Bedarf durchgeführt werden, da dadurch der Optimierungsvorteil, den die Standardverarbeitung lokaler Variablen in Python 3 bietet, entfällt.
Das obige ist der detaillierte Inhalt vonWarum aktualisiert exec lokale Variablen in Python 3 nicht und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!