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

Я хочу определить несколько переменных в моем основном скрипте python и использовать их в функции, которая определена в отдельном модуле. Вот пример кода. Допустим, что основной скрипт называется main.py, а модуль называется mod.py.

Mod.py

def fun(): print a 

main.py

 from mod import * global a a=3 fun() 

Теперь этот код дает мне ошибку

 NameError: global name 'a' is not defined 

Может кто-нибудь объяснить причину возникновения ошибки (я имею в виду, что переменная, определяемая как глобальная, должна быть доступна для всех функций, правильно?) И что может быть обходным? Я уже знаю об этих двух вариантах и ​​не хочу брать ни одну из этих

  1. Определите переменную в модуле вместо основного скрипта.
  2. передайте переменную в качестве аргумента функции.

Если есть другой вариант, предложите.

редактировать

Я не хочу использовать вышеперечисленные варианты, потому что

  1. в настоящее время эти значения установлены для меня. Но я подозреваю, что они могут измениться в будущем (например, имя базы данных и IP-адрес хоста). Поэтому я хочу хранить их как переменные в одном месте. Так что становится легче редактировать сценарий в будущем. Если я определяю переменные в каждом модуле, мне придется отредактировать их все.
  2. Я не хочу передавать их в функции, потому что их слишком много, около 50 или около того. Я знаю, что могу передать их как ** kwarg, но это выглядит не слишком хорошо.

2 Solutions collect form web for “глобальная переменная, определенная в основном скрипте, не может быть доступна функцией, определенной в другом модуле”

Глобальные переменные, разделяемые между модулями, как правило, являются плохими идеями. Если они вам нужны (например, для некоторых целей конфигурации), вы можете сделать это следующим образом:

global_config.py

 # define the variable a = 3 

main.py

 import global_config def fun(): # use the variable print(global_config.a) 

Эта:

переменная, определяемая как глобальная, должна быть доступна для всех функций, не так ли?

просто не соответствует действительности. Это не то, как работают глобальные переменные; они доступны для всех функций в модуле, где они определены .

Вы не объясняете, что делаете, или почему эти решения не работают для вас, но, вообще говоря, глобальные переменные – плохая идея; передача значения явно почти всегда путь.

  • Как получить доступ к модулю стандартной библиотеки в Python, когда есть локальный модуль с тем же именем?
  • Определение типа импорта Python
  • Не удалось использовать easy_install для установки модулей Python
  • Установка lxml, libxml2, libxslt в Windows 8.1
  • Предотвращение импорта кода Python из определенных модулей?
  • Проверка версии модуля Python во время выполнения
  • Нужен модуль python для создания текстовых документов
  • Можете ли вы определить псевдонимы для импортированных модулей в Python?
  • Python - лучший язык программирования в мире.