`topmost .__ init __。py`是否可以访问`topmost.submodule .__ init __。py`中的全局变量?

时间:2017-05-11 06:16:43

标签: python inheritance global-variables modularity

如果我的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全局变量才能在最顶层访问。

1 个答案:

答案 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()被调用后才会生效。