Verhalten von exec in Python 2 und Python 3
In Python 2 fungierte die exec-Anweisung als Anweisung und ermöglichte Entwicklern die dynamische Ausführung Python-Code. In Python 3 wurde exec jedoch zu einer Funktion, exec(), was zu einigen Verhaltensunterschieden führte.
Exec-Funktionsverhalten
Ein auffälliger Unterschied ist die Handhabung von local Variablen. In Python 2 konnte die Verwendung der exec-Anweisung lokale Variablen innerhalb des Funktionsumfangs ändern. Zum Beispiel:
def test(): a = 42 exec("a = 100") print(a) # Output: 100
In Python 3 ist diese Funktionalität jedoch nicht mehr verfügbar. Durch das Ausführen von Code mit der Funktion exec() werden lokale Variablen nicht geändert, auch wenn sie zuvor deklariert wurden. Dies liegt daran, dass Funktionsbereiche in Python 3 immer optimiert sind.
Python 2-Verhalten in Python 3 erreichen
Um das Verhalten von Python 2 zu replizieren, wobei exec lokale Variablen ändert , Python 3 bietet einen anderen Ansatz. Entwickler müssen einen neuen Namespace anstelle des lokalen Bereichs verwenden. Dies kann erreicht werden, indem ein Wörterbuch erstellt und an die Funktion exec() übergeben wird:
def test(): a = 42 namespace = {} exec("a = 100", namespace) print(a) # Output: 42 print(namespace['a']) # Output: 100
In diesem Beispiel verwendet die Funktion exec() das Namespace-Wörterbuch zur Variablenmanipulation. Der Namespace wird dann verwendet, um den geänderten Wert von „a“ abzurufen.
Erzwingung lokaler Variablen
In Python 3 können einige erzwungene Variablen unerwartetes Verhalten bei exec verursachen . Das folgende Beispiel zeigt:
def test(): a = 42 d = locals() exec("a = 100\nprint('b:', a)", globals(), d) print(a) # Output: 42 print(d['a']) # Output: 100
Hier wird die Variable „a“ in der Funktion exec() in die Variable „b“ umgewandelt, was dazu führt, dass ein anderer Wert gedruckt wird. Dies verdeutlicht die Einschränkungen von locals() bei der Beeinflussung von Variablen, die mit exec() deklariert wurden.
Das obige ist der detaillierte Inhalt vonWie unterscheidet sich das Verhalten von „exec' zwischen Python 2 und Python 3?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!