Gemäß diesem Question's accepted answer, ich verstehe, ich kann nicht reine globale Variablen erstellen. Okay, cool.Zugriff auf eine Variable aus dem äußeren Bereich über ein globales Schlüsselwort in Python
Doch dann geht er auf und sagt:
[..] alles, was Sie tun können, ist eine Variable in einem bestimmten Bereich zu machen. (Wenn Sie eine Variable in den Python-Interpreter machen, und importieren Sie dann andere Module, ist Ihre Variable in dem äußersten Umfang und somit global in Ihrer Python-Session. [..]
Okay, so können wir nicht zuordnen Globals im ursprünglichen Sinne, aber es scheint möglich, auf Variablen im äußersten Bereich aus einem Paket zugreifen, über die global
Schlüsselwort, korrekt?
Ich vermisse dann offensichtlich etwas von entscheidender Bedeutung in meinen Bemühungen, auf eine Variable, die über Kommandozeilenargumente an mein Python-Programm übergeben wird
Mein Programm hat die üblichen __main__.py
, die Argumentparsing behandelt und führt Code aus meinem Python-Modul backend
.
backend
hat Code, der auf Eingabe über Befehlszeilenargumente angewiesen ist. Ich scheine jedoch diese Argumente für backend
nicht verfügbar zu machen.
Layout Mein Pakets ist:
mypackage
- __main__.py
- backend/
-__init__.py
-direction.py
Hier __main__.py
:
import argparse
# Setup ArgParser
parser = argparse.ArgumentParser(description="Fancy Description of program.")
parser.add_argument('--tar', nargs=1, dest='target',
help='Specify output folder.',
default=['/path/to/output'])
target_dir = args.target[0]
# Import backend now that our variable is set.
from backend.direction import direction
Und mein backend/direction.py
:
global target_dir
print(target_dir)
Ausführen dieses eine NameError: 'target_dir' is not defined
wirft. Also wo ist die Hütte? Nehme ich hier eine Unmöglichkeit an, oder mache ich einfach eine Deklaration durcheinander?
Wenn wir 'global' sagen, bedeutet dies, dass die Variable irgendwo im äußeren Bereich definiert ist. Es ist für andere Module nicht sichtbar. (Jede Datei, die Sie erstellen, ist ein Modul in Python). Daher müssen Sie das Modul explizit importieren, um auf die Variable zuzugreifen. – thefourtheye
Also, in meinem Fall importiere ich "__main__" in meinem 'direction.py'? Das hört sich nicht hübsch an, noch mag es etwas, das getan werden sollte (?). Ist es akzeptabel, stattdessen eine Variable aus einer Datei als Workaround zu laden? – nlsdfnbch
@ j4ck Wahrhaftig, Sie sollten wahrscheinlich überhaupt keine globalen Variablen verwenden. Wenn Sie sie verwenden müssen, sollten Sie sie am besten auf ein einzelnes Modul beschränken (siehe [PEP8] (https://www.python.org/dev/peps/pep-0008/#global-variable-names)). . –