Python中是否有模块级变量?

3

我正在编写调用脚本:

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)

我原本期望每个人都在config.py模块中引用同一个变量limit。不幸的是,我在调试时发现load_data看到的是None限制,尽管它之前已经被设置了。
为什么呢?
1个回答

4
当你执行from .config import *时,你是将config中的limit复制到你自己的命名空间中。config中的limit与你导入的limit不是同一个实体。它们位于各自独立的命名空间中,互相独立。
作为解决方法,可以考虑以下示例: 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。然后,您可以使用 app.A.limit 引用变量。

如何拥有一个?或者如何引用一个? - Dims
你需要将.config import *更改为import .config。然后,如果我没记错的话,引用config.limit将会指向相同的项目。 - cs95
@Dims 添加了一个示例。 - cs95
import configimport .config 都不起作用。第一个会报错“没有找到模块 config”,第二个会报错“语法无效”。 - Dims
@ Dims编辑了我的答案。这应该有所帮助。 - cs95

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