В соответствии с этим Question's accepted answer, я понимаю, что я не могу создавать чистые глобальные переменные. ОК, круто.Доступ к переменной из внешней области с помощью ключевого слова global в Python
Однако, затем он идет дальше и говорит:
[..] все, что вы можете сделать, это сделать переменную в конкретной области. (Если вы сделаете переменную внутри интерпретатора Python, а затем импортировать другие модули, переменная находится в наружном объеме и, таким образом, глобальный в вашей Python сессии. [..]
Итак, мы не можем назначить globals в исходном смысле, но, возможно, можно получить доступ к переменным в самом удаленном объеме изнутри пакета, с помощью ключевого слова global
, правильно?
Я, по-видимому, не вижу в моих усилиях доступа к переменная, переданная моей программе python через аргументы командной строки.
Моя программа имеет обычный __main__.py
, который обрабатывает разбор аргументов и выполняет код из моего модуля python backend
.
backend
имеет код, который полагается на ввод через аргументы командной строки. Тем не менее, я, кажется, не могу сделать эти аргументы доступными для backend
. макет
Мой пакет является:
mypackage
- __main__.py
- backend/
-__init__.py
-direction.py
Вот __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
И мой backend/direction.py
:
global target_dir
print(target_dir)
Запуск этого поднимает NameError: 'target_dir' is not defined
. Так где же корма? Я предполагаю невозможность здесь, или я просто испортил объявление?
Когда мы говорим 'global', это означает, что переменная определена где-то во внешней области. Он не будет видимым для других модулей. (Каждый созданный вами файл является модулем в Python). Таким образом, вам нужно явно «импортировать» модуль для доступа к переменной. – thefourtheye
Итак, в моем случае я импортирую '__main__' в свой' direction.py'? Это звучит не так, как будто это должно быть сделано (?). Можно ли вместо этого загружать переменную из файла в качестве обходного пути? – nlsdfnbch
@ j4ck По правде говоря, вы, вероятно, вообще не должны использовать глобальные переменные. Если вам нужно их использовать, лучше всего держать их в привязке к одному модулю (см. [PEP8] (https://www.python.org/dev/peps/pep-0008/#global-variable-names)) , –