Я хотел бы уточнить, как распределены глобальные переменные из разных модулей?
Мне не удалось найти соответствующую документацию по этому вопросу, поэтому я полагаюсь на наблюдения, но я хотел бы получить более глубокое понимание, если мои выводы являются простым совпадением реализации или я могу им доверять?
Тестовый случай:
module_1.py:
global_var1 = 'm1_v1'
global_var2 = 'm1_v2'
def f():
print('f: {}'.format(global_var1))
print('f: {}'.format(global_var2))
module_2.py:
import module_1
global_var1 = 'm2_v1'
def g():
print('g: {}'.format(global_var1))
print('g: {}'.format(global_var2))
module_1.f()
g()
$ python3 module_2.py
f: m1_v1
f: m1_v2
g: m2_v1
Traceback (most recent call last):
File "module_2.py", line 11, in <module>
g()
File "module_2.py", line 7, in g
print('g: {}'.format(global_var2))
NameError: name 'global_var2' is not defined
Вывод:
Таким образом, я пришел к выводу, что функция будет использовать глобальные переменные в следующем порядке:
- модуль, в котором используется функция
- модуль, в котором определена функция (РЕДАКТИРОВАТЬ: это единственный ответ!)
Глобальные не удаляется из импортированных модулей.
РЕДАКТИРОВАТЬ: функции, импортированные из других модулей, вызывают глобальные значения их модулей как закрытие.
Вопрос:
Я хотел бы видеть некоторая исчерпывающая документация по этому вопросу (которую я не смог найти ...).
Хотя тестирование это хорошо, я понятия не имею, если это странное совпадение, и этому поведению никогда нельзя доверять, или это ожидаемый способ?
Кроме того, что если функция как-то импортируется через 3-й модуль? что если функция является методом класса? Et c .et c.
Если вы не можете указать мне документацию, но вы знаете руководство "наверняка", мне тоже интересно.
Я не буду go подробно, почему и как я хочу это использовать, мне в первую очередь интересно лучше понять работу python. Однако, если вы знаете лучшее решение, учитывая имеющуюся информацию, мне также интересно это увидеть - оно НЕ будет принято в качестве ответа.
В случае, если есть разница между python2 и python3, мой основной интерес - python3, но также приятно иметь информацию о python2.