在python中导入模块

马亨德拉·维什瓦卡玛(Mahendra vishwakarma)

我正在学习Python,而在学习模块时,我想到了两个疑问。

  • 疑问1:

    我知道该模块只是python文件,例如filename.py,但是Python中的子模块是什么?

  • 疑问2:

    考虑以下三行代码:

    import modulename
    from pkgname import modulename
    from pkgname import *
    

    这三个语句全部使用__init__.py(在pkgname包装内)还是仅使用第三条语句?

阿南德·库玛(Anand S Kumar)

为了使您的第二个问题更加清楚。


当您这样做时-

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章