教程(第4段,https://docs.python.org/3/tutorial/modules.html#importing-from-a-package)提到:
它还包括显式包的任何子模块 由以前的import语句加载。请考虑以下代码:
import sound.effects.echo
import sound.effects.surround
from sound.effects import *
在此示例中,回显和环绕模块将导入 当前命名空间,因为它们是在sound.effects中定义的 执行from ... import语句时的包。 (这也有效 定义
__all__
时。)
疑惑:
previous import statements
指的是哪个?from sound.effects import *
__all__
中的__init__.py
中定义外,post
不应导入任何内容。答案 0 :(得分:1)
previous import statements
指的是:
import sound.effects.echo
import sound.effects.surround
根据CPython 3.6,from sound.effects import *
仅导入__init__.py
中加载的子模块(通过定义__all__
)。这意味着,如果未定义echo
,则无法在surround
和__all__
中使用符号。
否则,
它还包括由以前的import语句显式加载的包的所有子模块。
仅在__all__
的{{1}} sound.effects
__init__.py
中定义__all__ = ["echo", "surround", "reverse"]
时才有效。