在Python中让变量在多个文件中全局可用

2 投票
1 回答
11228 浏览
提问于 2025-04-17 09:58

我想让一个变量在多个文件中都能使用,这样在任何一个文件里对这个变量的操作都会反映到包含这个变量的文件中。

我现在的做法是:

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 则不是。我希望上面的代码在执行 python b.py 时能打印出 0 1 1 2(当然应该是换行显示),但实际上它显示的是 0 1 0 1

那要怎么实现呢?

1 个回答

7

我先说一下,我觉得像这样使用全局变量(用 global 关键字)是不好的做法。

不过,有一种方法可以重新组织代码,就是把你的全局变量放到一个单独的模块里的类里面,这样可以避免循环导入的问题。

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

撰写回答