将写好的文件,可以打包分发给其他人使用,在使用过程中,就需要进行导入,导入就是import。
python支持import的模块主要分三类:1.内置模块build-in,2.第三方模块,3.自定义模块。
import导入时,解释器做的三件事如下:
1.在运行的文件中,创建一个名称,为被导入对象;
2.运行被导入对象的代码,将运行过程中产生的名称,扔到一个独立的名称空间中,也就是一个内存地址
3.将该独立的名称空间,和之前创建的名称建立映射引用关系。
根据内存释放回收机制,只有当运行文件结束时,才会释放被导入模块的内存空间。
import直接导入模块,在调用该模块中的变量和方法时,需要指定模块名称,在运行文件中,可以存在同名的变量和方法,因为在访问调用时使用的名称空间不是同一个,所以不会产生冲突。
from ... import ...,直接将模块中的变量和方法,导入到当前运行文件中,也就是直接在当前文件的全局名称空间中创建了变量和方法名称,全局唯一,如果在后面继续为该变量赋值操作,则是直接修改该名称对应的内存地址, 不会重新创建。
import的查找顺序,先是本文件所在目录下查找,也就是__file__目录,如果找不到,则会直接使用sys.path中的路径进行查找,如果都找不到,会直接报错。
import的查找,优先从内存中查找,如果被导入的模块已经在内存中,则会直接在内存中引用,不会去硬盘中查找。
import导入的模块,其中的变量和方法在调用时,使用的参数和方法,只与在定义的时候有关系,和在调用的地方没有关系。
import导入的模块,路径分为绝对路径和相对路径,如果是一个模块内相互import,建议使用相对路径。
软件包的目录规范中,通常在入口文件中,需要添加文件查找路径,也就是BASE_PATH,后续包中的查找,都可以给予该BASE_PATH来进行查找。在模块内的个文件之间,使用相对路径进行查找即可。