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.

  • Plots sind nicht sichtbar mit matplotlib plt.show ()
  • Wenn Attribut vorhanden ist, drucken Sie Kinder Beschreibung
  • Warum ist str.strip () so viel schneller als str.strip ('')?
  • Freigeben von Synchronisationsobjekten über globalen Namespace vs als Funktionsargument
  • Platzieren der Daten in den jeweiligen Feldnamen in einer CSV-Datei Verwenden von Python
  • Starten Sie HTML-Code im Browser (der von BeautifulSoup generiert wird) direkt aus Python
  • Matplotlib-Kompilierungsfehler: TypeError: nicht ordnungsgemäße Typen: str () <int () [duplicate]
  • Lernen über Warteschlangenmodul in Python (wie man es ausführt)
  • Getting Raw Binary Repräsentation einer Datei in Python
  • Fehlende Abschnitte von OLS Regressionsmodellen in Python Statsmodellen
  • Probleme beim Lesen von json aus der txt-Datei
  • Python ist die beste Programmiersprache der Welt.