Heim >Backend-Entwicklung >Python-Tutorial >Wie unterscheidet sich das Verhalten von „exec' zwischen Python 2 und Python 3?

Wie unterscheidet sich das Verhalten von „exec' zwischen Python 2 und Python 3?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-14 13:51:01911Durchsuche

How does the behavior of `exec` differ between Python 2 and Python 3?

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!

Stellungnahme:
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