在Python文档说
考虑以下代码:
import sound.effects.echo
import sound.effects.surround
from sound.effects import *
在此示例中,echo和Surround模块被导入到当前名称空间中,因为它们在执行from ... import语句时在sound.effects包中定义。(这在定义__all__时也适用。)
我尝试以下代码
# package/
# __init__.py
# sub_module.py
import package.sub_module
from package import *
print(sub_module)
当package/__init__.py
为空时,代码可以正常工作。但是,package/__init__.py
包含__all__ = []
时print(sub_module)
会提高NameError
。文档手段的含义是什么(定义了全部内容后也可以使用)。
代码:
package/
__init__.py
sub_module.py # empty file
main.py
在main.py中:
import package.sub_module
from package import *
print(sub_module)
当package/__init__.py
为空时,执行python3 main.py
获取<module 'package.sub_module' from '/path/to/package/sub_module.py'
当package/__init__.py
包含时__all__ = []
,执行python3 main.py
获取
Traceback (most recent call last):
File "main.py", line 3, in <module>
print(sub_module)
NameError: name 'sub_module' is not defined
如果模块package
定义__all__
,则是由导入的模块名称列表from package import *
因此,如果您将其定义__all__
为空列表,则from package import *
不会导入任何内容。
尝试像这样定义它:
__all__ = ['sub_module']
另请注意,您不必from package import *
使用sub_module
您也可以执行以下操作:
import package.sub_module
print(package.sub_module)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句