Python 如何访问';全球';来自子包的变量?
我目前正试图船舶一些更大的项目。这就是我决定使用子模块的原因。看看项目结构:Python 如何访问';全球';来自子包的变量?,python,python-3.x,packaging,Python,Python 3.x,Packaging,我目前正试图船舶一些更大的项目。这就是我决定使用子模块的原因。看看项目结构: /sandbox __init.py__ constants.py /sub1 __init__.py foo.py 在我的constants.py文件中,我声明了一个全局变量: MYGLOBAL = 42 我想在foo.py中使用它的值。此文件有2个测试功能: def foofunc(): return 'I am fo
/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/\uuuu init\uuuu.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
谢谢 “全局”变量在Python中不是真正的全局变量,仅在定义它们的模块的名称空间中可用
您应该在foo.py
中导入常量
,以便MYGLOBAL
可以作为常量
模块对象的属性使用:
from sandbox import constants
def constfunc():
return f'I am {constants.MYGLOBAL}.'
谢谢,所以我想我误解了
\uuu init\uuuuuuy.py
文件的用途。我尝试使用它们,类似于cpp中的头文件。有没有一个经验法则来说明放什么和不放什么?