如何在导入的模块之间共享全局变量?

3
我是一个有用的助手,可以为您进行文本翻译。以下是您需要翻译的内容:

我有两个模块,a.py和b.py。我希望像这样在b.py中可以使用来自a.py的全局变量:

a.py:

#!/usr/bin/env python
var = "this is global"
import b
b.foo()

b.py:

#!/usr/bin/env python
var = "this is global"
def foo():
    print var

目前,我在每个模块中重新声明全局变量。一定有更简单的方法。


这没有任何意义。你想在 b 上导入 a,然后打印 a.var - JBernardo
@JBernardo:不,那会导致循环导入。 - WilHall
@WilHall 不会,因为应该删除 import b。顺便说一下,Python可以处理循环导入而不会抱怨。 - JBernardo
3个回答

4
创建一个设置模块,如果需要共享全局变量,那么在其中定义。这样,你只需要导入和引用每个全局变量一次,并将它们隔离在设置模块的命名空间内。这是一个好的做法。
#settings.py
var = 'this is global'

# a.py
import settings
import b
b.foo()

# b.py
import settings
def foo():
    print settings.var

谢谢大家。很有道理。现在需要做的是搜索/替换我的85个模块(插件)。 - tahoar

2
通过让b.py需要从a.py中获取全局变量,您已经创建了相互依赖的类,这是不良的设计。
如果您有需要共享的静态变量,请考虑创建c.py,这样a.py和b.py都可以导入并引用它。
如果您有需要共享的动态变量,请考虑创建一个设置类,该类可以被实例化并在模块之间传递。

2
在c.py中定义您的全局变量,并将其导入a.py和b.py。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接