模块
将功能相似的函数和类放到一个模块里面
我们将类似功能的模块放到一起形成包
模块编程的优势:(1)任务分解 团队协作开发
(2)实现代码复用,(3)可维护性增强
模块化一般流程:(1)设计API进行功能描述
(2)编码实现API中描述的功能
(3)在模块中编写测试代码,消除全局代码
(4)使用私有函数实现不被外部客户端调用的模块函数
API是用于描述模块中提供的函数和类的功能描述和使用方式描述
模块化编程中首先设计的就是模块API功能描述
__doc__函数可以查看功能描述
在正常情况下,模块名字对应源文件名。只有当一个模块被作为程序入口时,主程序、交互式提示符下,它的__name__值为“__main__” 有if __name__ =="__main__" 则该模块作为独立模块运行
import 模块的导入
from import
import 模块1,模块2
iimport 模块名 as 模块别名
import加载的模块分为四个通用类别:
(1)使用python编写的代码,(2)已被编译为共享库或DLL的C或C++扩展
(3)包好一组模块的包 (4)使用C编写并连接到python解释器的内置模块
import本质上使用了内置函数__import__()可以通过它实现动态导入
当我们通过import导入一个模块时,python解释器进行执行,最终会生成一个对象,这个对象就代表了被加载的模块
导入一个模块无论导入多少次只生成一个对象
from 模块名 import 成员1,成员2
from import 导入的时模块中的一个函数/一个类
不要使用from import *
importlib 动态引入一个模块 importlib.reload
包 package的使用
当一个项目模块很多的时候使用,相当于一个文件夹
创建一个包 自动生成__init__.py文件
导入包的本质是导入了包的__init__.py 在里面写包里面的统一执行代码 定义函数 定义类,保持这个文件比较简单 可在这个文件里面批量导入模块(写多个import语句)
包名.模块名 来调用
__init__.py 三个核心作用:
(1)作为包的标识,不能删除
(2)用来实现模块导入
(3)导入包是指是执行该文件,可以在文件中做这个包的初始化,以及需要统一执行的代码
包内引用
from . import xxx同级目录
from .. import xxx上级目录
sys.path 和模块搜索路径
导入模块文件时会按照以下顺序寻找模块文件:
(1)内置模块
(2)当前目录
(3)程序的主目录
(4)pythonpath目录
(5)标准链接库目录
(6)第三方库目录(site-packages目录)
(7).pth 文件的内容
(8)sys.path.append()临时添加的目录