“topmost.\uu init\uuuuuuuuuuuy.py”是否可以访问“topmost.submodule.\uuuu init\uuuuuuuuuuy.py”中的全局变量?

2024-09-20 00:17:09 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我的Python库topmost的结构如下:

topmost
    /__init__.py
    /submodule
      /__init__.py

是否有可能topmost.__init__.py访问topmost.submodule.__init__.py中的全局变量?

对于topmost.submodule.__init__.py,应该有一些全局变量:

def characterize(input):
    global abc 
    abc = load_abc_model()
    return abc.func(input)

我在topmost.__init__.py中尝试过这个方法,但是topmost.submodule.__init__.py中的全局变量仍然无法访问:

from __future__ import absolute_import

from topmost import submodule

__import__('submodule', globals())

但是只有abc全局变量在最顶层是不可访问的


Tags: frompyimportinputmodelinitdefload
1条回答
网友
1楼 · 发布于 2024-09-20 00:17:09

当函数第一次执行时,通过/在函数中声明/定义的全局变量将出现(在全局范围内)

证明:

$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 'abc' in globals()
False
>>> def foo():
...     global abc
...     abc = 123
...     print('foo')
... 
>>> 'abc' in globals()
False
>>> foo()
foo
>>> 'abc' in globals()
True
>>> 

使用当前设置:

topmost
    /__init__.py
    /submodule
      /__init__.py

以及:

def characterize(input):
    global abc 
    abc = load_abc_model()
    return abc.func(input)

topmost.submodule.abc只有在调用了topmost.submodule.characterize()之后才会生效

相关问题 更多 >