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编辑了我的答案。这应该会有帮助。