我想将变量全局变为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
如何实现?
答案 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