Python中有模块级变量吗?

Python中有模块级变量吗?,python,scope,Python,Scope,我正在用调用方脚本编写: from XXX import config .... config.limit = limit data.load_data() 其中config.py具有 limit = None from .config import * ... def load_data(): ... if limit is not None: limit_data(limit) 内部和data.py具有 limit = None from .con

我正在用调用方脚本编写:

from XXX import config

....

config.limit = limit
data.load_data()
其中
config.py
具有

limit = None
from .config import *
...
def load_data():
    ...
    if limit is not None:
        limit_data(limit)
内部和
data.py
具有

limit = None
from .config import *
...
def load_data():
    ...
    if limit is not None:
        limit_data(limit)
我希望每个人都在
config.py
模块中引用相同的变量
limit
。不幸的是,我看到在去抖动时,
load\u data
看到了
None
限制,尽管它之前已经设置过


为什么?

当您从.config导入*执行
时,您正在将
限制
的副本从
配置
导入到您自己的命名空间中。驻留在
config
中的
limit
实体与您导入的实体不同。它们位于各自的名称空间中,彼此独立

作为一个解决办法,考虑这个例子:

A.py

foo = 5

def print_foo():
    print(foo)
import A

A.foo = 10
A.print_foo()
B.py

foo = 5

def print_foo():
    print(foo)
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

如何拥有一个?或者如何引用?您将从
.config导入*
更改为导入
.config
。然后,如果我没有弄错的话,引用
config.limit
将引用同一项。@Dims添加了一个示例。
import-config
,或
import.config
都不起作用。第一个抱怨“没有模块配置”,第二个抱怨“语法无效”@Dims编辑了我的答案。这应该会有帮助。