Skip to main content
 首页 » 编程设计

python之在python中导入模块

2025年05月04日14Free-Thinker

我正在学习 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 imports packagename ,我的意思是它导入了 __init__.py那个包,然后导入 modulename .这就是为什么当您执行上述任何操作时它会导入 __init__.py 的原因。 .


当你这样做时——

from packagename import * 

请注意,这不会导入 modulename默认情况下来自 packagename,这只会导入 __init__.py来自 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,因此它不会导入 __init__.py。 .