我正在学习Python,而在学习模块时,我想到了两个疑问。
疑问1:
我知道该模块只是python文件,例如filename.py
,但是Python中的子模块是什么?
疑问2:
考虑以下三行代码:
import modulename
from pkgname import modulename
from pkgname import *
这三个语句全部使用__init__.py
(在pkgname
包装内)还是仅使用第三条语句?
为了使您的第二个问题更加清楚。
当您这样做时-
import packagename.modulename
或者
from packagename import modulename
Python内部首先导入packagename
,当我说python导入时packagename
,我的意思是它导入__init__.py
那个包的,然后再导入modulename
。这就是为什么当您执行上述任何操作时都会导入的原因__init__.py
。
当您这样做时-
from packagename import *
请注意,modulename
默认情况下这不会__init__.py
从packagename导入,而只会从packagename导入,并且您在__all__
列表中列出的所有模块__init__.py
,如果该列表中未列出任何模块,则不会导入任何模块。例子 -
可以说我有
shared
-- __init__.py
-- a.py
__init__.py
看起来像 -
print("In Shared")
a.py
看起来像 -
print("In A")
现在,在上面的目录中shared
,并打开python,如果这样做-
from shared import *
它会打印出来-
In Shared
但是,如果您将代码更改__init__.py
为-
print("In Shared")
__all__ = ['a']
并从相同位置进行相同的导入,它将打印出-
In Shared
In A
如您所见,它仅导入__all__
列表中定义的子模块。
最后,当您这样做时-
import modulename
可以说,您直接从内部执行操作packagename
,方法是将目录更改为它,然后在其中打开python交互式解释器。那时,您并没有要求Python为您导入packagename,因此它不需要导入packagename,因此它也不会import __init__.py
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句