сделать переменную глобальной для нескольких файлов в Python - PullRequest
2 голосов
/ 11 января 2012

Я хочу сделать переменную глобальной для более чем 2 файлов, чтобы работа с любым файлом отражалась в файле, содержащем переменную.

что я делаю, это:

b.py

import a

x = 0
def func1():
    global x
    x = 1   
if __name__ == "__main__":
    print x
    func1()
    print x
    a.func2()
    print x

a.py

import b

def func2():
    print b.x
    b.x = 2

Я искал темы здесь и обнаружил, что from a import * делает копии, а import a - иначе. Я ожидаю, что приведенный выше код напечатает 0 1 1 2 (уверен, что он должен быть в новых строках) при выполнении python b.py, но он показывает 0 1 0 1

Как это реализовать?

1 Ответ

7 голосов
/ 11 января 2012

Позвольте мне начать с того, что я думаю, что такие глобальные переменные (использующие ключевое слово global) являются злом.Но один из способов реструктурировать это поместить ваши глобальные переменные в класс модуля SEPARATE, чтобы избежать циклического импорта.

a.py

from c import MyGlobals

def func2():
    print MyGlobals.x
    MyGlobals.x = 2

b.py

import a
from c import MyGlobals

def func1():
    MyGlobals.x = 1   


if __name__ == "__main__":
    print MyGlobals.x
    func1()
    print MyGlobals.x
    a.func2()
    print MyGlobals.x

c.py

class MyGlobals(object):
    x = 0

ВЫХОД

$ python b.py 
0
1
1
2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...