`topmost.__init__.py` 是否可以访问 `topmost.submodule.__init__.py` 中的全局变量?
Is it possible for `topmost.__init__.py` to access global variables in `topmost.submodule.__init__.py`?
如果我的 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
全局变量不可访问。
一个全局变量declared/defined through/within一个函数在第一次执行时会出现(在全局范围内)
证明:
$ 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()
被调用后才会上线。
如果我的 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
全局变量不可访问。
一个全局变量declared/defined through/within一个函数在第一次执行时会出现(在全局范围内)
证明:
$ 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()
被调用后才会上线。