Python 3: Die Sichtbarkeit von globalen Variablen über Module hinweg

Ähnliche Fragen wurden vorher gestellt:

Hier , hier und hier , und ich bin mir dessen bewusst.

Sagen Sie haben 2 Module, wo man globale Variablen hat, die Sie aus einem anderen Modul lesen möchten. Gibt es eine Möglichkeit, diese über Module zugänglich zu machen, ohne sich auf sie als Modul zu verweisen.

Beispiel:

Modulea.py:

import moduleb from moduleb import * print("A String: " + astring) print("Module B: " + moduleb.astring) afunction() print("A String: " + astring) print("Module B: " + moduleb.astring) 

Moduleb.py:

 astring = "dlroW olleH" def afunction(): global astring astring = "Hello World" 

Der Ausgang ist

 A String: dlroW olleH Module B: dlroW olleH A String: dlroW olleH Module B: Hello World 

Dass durch die Verwendung von "from module import *" die globalen Variablen kopiert und nicht referenziert werden.

Vielen Dank im Voraus für jede Hilfe.

One Solution collect form web for “Python 3: Die Sichtbarkeit von globalen Variablen über Module hinweg”

from module import * bindet die Objekte im module wie benannte Variablen im aktuellen Modul. Dies ist keine Kopie, sondern die Hinzufügung eines Verweises auf dasselbe Objekt. Beide Module sehen das gleiche Objekt, bis einer von ihnen das Objekt bindet. Das Ändern eines veränderlichen Objekts beeinträchtigt die Variable nicht, so dass eine Aktion wie das Anhängen an eine Liste in Ordnung ist. Aber die Zuordnung der Variablen macht es wieder. Normalerweise ist die Rebind geradeaus:

 myvar = something_else 

Aber manchmal ist es nicht so klar

 myvar += 1 

Für unveränderliche Objekte wie int oder str , bindet dies die Variable und nun die beiden Module haben unterschiedliche Werte.

Wenn Sie sicherstellen möchten, dass Sie immer auf das gleiche Objekt verweisen, halten Sie den Namespace-Verweis.

  • Wie man Typ-Tipp für eine generische Fabrik Methode zu erstellen?
  • Python - Summe von zwei Zahlen Programmfehler
  • ImportError: Keine Modulnamen 'matplotlib' Python 3.3
  • Ändern Sie ein Attribut einer Funktion in seinem eigenen Körper?
  • Wie kann ich 24 Stunden Zeit in 12 Stunden Zeit umwandeln?
  • Wie behebe ich ein "AttributeError: __exit__" in Multiprocussion in Python?
  • Warum ist der gleichwertige Python-Code so viel langsamer
  • Zeichnung in PyGobject (python3)
  • Zugriff auf Klassenvariablen aus einem Listenverständnis in der Klassendefinition
  • Eine Liste aus einer Konfigurationsdatei mit ConfigParser in Python abrufen
  • So verwenden Sie Listen in Konditionen
  • Python ist die beste Programmiersprache der Welt.