python import 本质剖析

说到import我们必须先捋清两个概念,模块和包

模块:本质上就是.py文件,包含了独立的python逻辑,一般都是一个独立的功能,目的是为了让别人import,重复利用

包:包含了一个或多个模块的目录,区别于目录的一个重要标识就是,每个包里必有一个__init__.py文件。这是包的初始化文件。

以下开始分析import本质:
比如我们有一个模块文件test_module.py,和一个包test_package

import模块
import test_module
此种导入方法相当于在当前代码中创建了一个test_module对象,而test_module.py中的变量和函数相当于是test_module对象的属性和方法。我们可以通过test_module.属性名  test_module.方法名()调用模块中的内容
from test_module import *
此种导入方法相当于是把test_module.py中的代码导入到了当前环境。我们可以直接用test_module模块中的变量和方法

import包
import test_package
导入包会自动执行包中的__init__.py文件。在这个文件中我们可以做一些初始化工作。一般情况下我们既然会导入这个包,证明我们需要用到这个包下的多个甚至所有模块,所以我们所说的一些初始化工作就是在__init__.py文件中导入这个包下的所有模块:
from . import 模块1
from . import 模块2
......
而当我们调用的时候需要这样:
包名.模块名.函数名() # test_package.test_module.test()

搜索路径
在导入模块和包的过程中,总要先找到这个模块或包,这就是我们要说的搜索路径。其实搜索路径就是环境变量里的路径。搜索顺序就是按照其顺序依次查找的。我们可以把sys.path环境变量打印出来,可以看到第一个路径是空,代表当前路径,说明当前路径的优先级最高。在实际开发中,我们可以根据自己的需求给这个路径动态的增加自己需要的路径。


猜你喜欢

转载自blog.csdn.net/wang740209668/article/details/78965870
今日推荐