Использование глобальных переменных между файлами?
==================================================

Я немного озадачен тем, как работают глобальные переменные. У меня большой проект, около 50 файлов, и мне нужно определить глобальные переменные для всех этих файлов.

Я определил их в своих проектах.`main.py` файл, как показано ниже:

Я пытаюсь использовать`myList` в`subfile.py`, как следует

**Другой способ, которым я пытался, но тоже не работал**

И внутри`subfile.py` У меня было это:

Но опять же, это не сработало. Как мне это реализовать? Я понимаю, что это не может работать так, когда два файла на самом деле не знают друг друга (хорошо, подфайл не знает основной), но я не могу придумать, как это сделать, не используя io write или pickle, что Я не хочу делать.

Проблема в том, что вы определили`myList` из`main.py`, но`subfile.py` нужно использовать это. Вот простой способ решить эту проблему: переместить все глобальные переменные в файл, я называю этот файл`settings.py`, Этот файл отвечает за определение глобалов и их инициализацию:

Далее ваш`subfile` можно импортировать глобалы:

Обратите внимание, что`subfile` не звонит`init()`- эта задача принадлежит`main.py`:

Таким образом, вы достигаете своей цели, избегая инициализации глобальных переменных более одного раза.



`from your_file import *` должен исправить ваши проблемы. Он определяет все так, чтобы он был глобально доступен (за исключением локальных переменных в импорте, конечно).

например:

а также:



 и на самом деле это действительно хороший способ обработки имен переменных, которые вы хотите иметь доступными глобально. Но у вас есть ошибка имени в последней строке. Вот как это должно быть:

Видите последнюю строчку? myList является атрибутом globfile, а не subfile. Это будет работать, как вы хотите.

Майк



менных - и поэтому они гораздо более полезны, чем традиционные «глобальные переменные» из C.

Глобальная переменная фактически определена в модуле`__dict__` и может быть доступен извне этого модуля как атрибут модуля.

Итак, в вашем примере:

А также:



Если вы используете глобальный модуль в другом модуле и хотите установить глобальный динамически, обратите внимание на импорт других модулей после установки глобальных переменных, например:



[совместное использование глобальных переменных между модулями](https://docs.python.org/3/faq/programming.html#how-do-i-share-global-variables-across-modules):

Канонический способ обмена информацией между модулями в рамках одной программы - создать специальный модуль (часто называемый config или cfg).

config.py:

Импортируйте модуль конфигурации во все модули вашего приложения; модуль становится доступным как глобальное имя.

main.py:

или же

Это также позволит вамустановлен такая переменнаядинамично:

В общем,**не использовать** изимпорт по модулю *, Это приводит к загромождению пространства имен импортера и затрудняет для линтеров обнаружение неопределенных имен.