Heim >Backend-Entwicklung >Python-Tutorial >Wie aktualisiere ich lokale Variablen korrekt mit der Funktion „exec' von Python?

Wie aktualisiere ich lokale Variablen korrekt mit der Funktion „exec' von Python?

Barbara Streisand
Barbara StreisandOriginal
2024-12-06 13:47:11465Durchsuche

How to Correctly Update Local Variables with Python's `exec` Function?

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!

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