/ / Bereiche in Python-Modulen - Python, Python-3.x

Bereiche in Python-Modulen - python, python-3.x

Ich habe einen Modulcode:

X = 88
def f():
global X
X = 99

Und noch eine Datei, die dieses Modul verwendet:

from First import X,f
X = 11
f()
print(X)

Nach meinem Verständnis, da wir die Symbole x und f explizit importieren, sollten sie Bestandteil des Namensraums der importierenden Module werden.

Und da die Funktion f das globale X ändert. Die Antwort sollte 99 sein.

Dies scheint jedoch nicht der Fall zu sein, da die Ausgabe 11 ist.

Bitte hilf mir zu verstehen warum?

Antworten:

7 für die Antwort № 1

Durch die Verwendung der from module import ... Syntax, die Sie erstellen Neu Namen, die an dieselben Objekte gebunden sind wie die Namen in den ursprünglichen Modulen. Diese Namen sind unabhängig.

Nach dem Import haben Sie folgendes:

First.X ----
|--> 88
another.X --/

Sie setzen dann another.X nur zu 11also hast du folgendes:

First.X --------> 88

another.X ------> 11

und nachdem du angerufen hast f(), du hast das:

First.X --------> 99

another.X ------> 11

Sie könnten stattdessen importieren gerade das Modul; das bindet den Namen First auf das Modulobjekt zeigen:

import First
first.X = 11
first.f()
print(first.X)

Jetzt funktioniert der gesamte Code First.X nur.

Vielleicht möchten Sie wissen, wie Python-Namen und Objekte funktionieren.