Глобальные переменные в импортированных модулях python

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

def foo():
  global x
  x = 'bar'
  goo()

def goo()
  global x
  print(x)

foo()

напечатает bar как и ожидалось. Однако это не работает, когда мне нужно импортировать goo из другого файла, например

file1.py

from file2 import goo

def foo():
  global x
  x = 'bar'
  goo()

foo()

file2.py

def goo()
  global x
  print(x)

приводит к NameError. Как можно передать x импортируемой функции, как в первом случае, не передавая его явно в качестве аргумента?


person inyrface    schedule 20.08.2020    source источник
comment
Глобальные переменные являются глобальными для модуля. В любом случае вы не должны использовать глобальные переменные таким образом.   -  person juanpa.arrivillaga    schedule 20.08.2020
comment
Вы уже упоминали об этом, вы можете явно передать значение в качестве аргумента goo. Почему ты не хочешь этого делать?   -  person mkrieger1    schedule 20.08.2020
comment
Потому что я намерен использовать goo() в других файлах, работающих параллельно, и я хочу, чтобы глобальная переменная была одинаковой для всех экземпляров.   -  person inyrface    schedule 21.08.2020


Ответы (1)


вам нужно установить ‹module_name›.‹variable_name› = 'bar', чтобы он работал так:

import file2

def foo():
    file2.x = 'bar'
    file2.goo()

foo()

файл1 такой же

person Hadrian    schedule 20.08.2020