Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何访问';全球';来自子包的变量?_Python_Python 3.x_Packaging - Fatal编程技术网

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中的头文件。有没有一个经验法则来说明放什么和不放什么?