在python中将变量全局变为多个文件

时间:2012-01-11 04:51:59

标签: python global-variables

我想将变量全局变为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 个答案:

答案 0 :(得分:7)

首先让我说,我认为像这样的全局变量(使用全局关键字)是邪恶的。 但重组它的一种方法是将你的全局变量放入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