Python中是否有模块级变量?

时间:2017-07-19 20:11:00

标签: python scope

我正在用来电脚本写作:

from XXX import config

....

config.limit = limit
data.load_data()

其中config.py

limit = None

内部和data.py

from .config import *
...
def load_data():
    ...
    if limit is not None:
        limit_data(limit)

我希望每个人都在limit模块中引用相同的变量config.py。不幸的是,我看到debygging时,load_data看到了None限制,尽管之前设置了它。

为什么?

1 个答案:

答案 0 :(得分:4)

执行from .config import *时,您要将limit的{​​{1}}副本导入您自己的命名空间。驻留在config中的limit实体与您导入的实体不同。它们位于各自的名称空间中,彼此独立。

作为解决方法,请考虑以下示例:

config

A.py

foo = 5 def print_foo(): print(foo)

B.py

现在,运行import A A.foo = 10 A.print_foo() 应该给出:

B.py

意思是,您可以通过添加名称空间限定符来引用相同的变量。

对于相对导入,您可以执行类似的操作:

$ python B.py
10

app/ __init__.py A.py B.py ,您需要致电B.py。然后,您将变量称为import app.A