Как разделить глобальные переменные между импортируемыми модулями?

#python #variables #global

#python #переменные #глобальный

Вопрос:

У меня есть два модуля, a.py и b.py . Я хочу, чтобы глобальные переменные из a.py быть доступным в b.py вот так:

a.py:

 #!/usr/bin/env python
var = "this is global"
import b
b.foo()
  

b.py:

 #!/usr/bin/env python
var = "this is global"
def foo():
    print var
  

В настоящее время я повторно объявляю глобальные переменные в каждом модуле. Должен быть более простой способ.

Комментарии:

1. Это не имеет смысла. Вы хотите import a включить b и использовать их print a.var

2. @JBernardo: Нет, это приведет к циклическому импорту.

3. @WilHall Нет, это не так, потому import b что их следует удалить. Кстати, Python работает с циклическим импортом без жалоб.

Ответ №1:

Создайте модуль настроек, который имеет общие глобальные переменные, если это то, что вы хотите. Таким образом, вы импортируете и ссылаетесь на каждый глобальный модуль только один раз и сохраняете их изолированными в пространстве имен модуля настроек. Это хорошо.

 #settings.py
var = 'this is global'

# a.py
import settings
import b
b.foo()

# b.py
import settings
def foo():
    print settings.var
  

Комментарии:

1. Спасибо всем. Имеет смысл. Теперь нужно выполнить работу и выполнить поиск / замену моих 85 модулей (плагинов).

Ответ №2:

Сделав b.py требовать глобальных данных от a.py таким образом, вы создали классы, которые зависят друг от друга, что является плохим дизайном.

Если у вас есть статические переменные, которые необходимо совместно использовать, подумайте о создании c.py которые оба a.py и b.py может импортировать и ссылаться.

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

Ответ №3:

Определите свои глобальные переменные в c.py и импортируйте их в a.py и b.py