如果我的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
全局变量才能在最顶层访问。
答案 0 :(得分:1)
首次执行函数时,在函数中声明/定义的全局变量将出现(在全局范围内)。
证明:
$ 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()
被调用后才会生效。