我目前正在尝试运送一些更大的项目。这就是为什么我决定使用子模块的原因。看一下项目结构:
/sandbox
__init.py__
constants.py
/sub1
__init__.py
foo.py
在我的constants.py
文件中,我声明了一个全局变量:
MYGLOBAL = 42
我想在foo.py
中使用它的值。该文件具有2个测试功能:
def foofunc():
return 'I am foo.'
def constfunc():
return 'I am {MYGLOBAL}.'
我还将这段代码放入/sandbox/sub1/__init__.py
:
from .foo import *
from sandbox.constants import *
现在,当我使用解释器时,我会尝试同时使用两个函数:
>> import sandbox.sub1
>> sandbox.sub1.foofunc()
'I am foo.'
>> sandbox.sub1.MYGLOBAL
42
>> sandbox.sub1.constfunc()
NameError: name 'MYGLOBAL' is not defined
据我了解,全局变量与函数位于相同的名称空间中,但是以某种方式函数看不到它。
如何访问它? Python版本是3.6。
谢谢!
答案 0 :(得分:2)
“全局”变量在Python中并不是真正的全局变量,仅在定义它们的模块的命名空间中可用。
您应该在constants
中导入foo.py
,以便可以将MYGLOBAL
用作constants
模块对象的属性:
from sandbox import constants
def constfunc():
return f'I am {constants.MYGLOBAL}.'