一、模块化结构
python程序由模块组成,一个模块对应python源文件,一般后缀名是:.py
模块化编程优势:
1、便于将一个任务分解成多个模块,实现团队协同开发,完成大规模程序开发
2、实现代码复用。一个模块实现后,可以被反复调用。
3、可维护性增强
二、模块化编程的一般流程:
1、设计API,进行功能描述
2、编码实现API中描述的功能
3、在模块中编程测试代码,并消除全局代码。
4、使用私有函数实现不背外部客户端调用的模块函数。
三、模块的导入
import语句的基本语法格式如下:
import模块名
import 模块1,模块2
import 模块 as 模块别名
import加载的模块分为四个通用类别:
a.使用python编写的代码(.py)
b.已被编译为共享库或者DLL的C或者C++扩展
c.包好一组模块的包
d.使用C编写并链接到python解释器的内置模块
四、__import__()动态导入
import语句本质上就是调用内置函数__import_(),我们可以通过它实现动态导入。给__import__()动态传递不同的参数值,就能导入不同的模块。
示例:
s = "math"
m = __import__(s)#导入后生成的模块对象的引用给变量m
不太推荐使用
五、包(package)的概念和结构
当一个项目中有很多个模块时,需要再进行组织。功能类似的模块放到一起,形成了“包”。本质上,“包”就是一个必须有__init__.py的文件夹。典型结构如下:
包下面可以包含““模块(module)”也可以包含“子包(package)”就像文件夹下面可以有文件。也可以有子文件夹一样
导入module.py
方式如下:
1、import a.aa.module_AA
2、from a.aa.import module_aa
3、 from a.aa.module_AA import fun_AA直接导入函数
__init__.py的三个核心作用:
1、作为包的标识,不能删除。
2、用来实现模糊导入
3、导入包实质是执行__init__.py文件,可以在__init__.py文件中做这个包的初始化,以及需要统一执行代码。已经。
尽量少写import *
六、包的引用
from ..import module_A #..表示上级目录, .表示同级目录
from .import module_A2 #.表示同级目录
七、sys.path和模块搜索路径
当我们导入某个模块文件时,python解释器去哪里找这个文件呢?只有找到这个文件才能读取、装载运行该模块文件。它一般按照如下路径寻找模块文件(按照顺序寻找,找到即停不继续往下寻找):
1、内置模块
2、当前目录
3、程序的主目录
4、pythonpath目录(如果已经设置了)
5、标准链接库目录
6、第三方库目录(site-packages目录)
7、.pth文件的内容(如果存在的话)
8、sys.path.append()临时添加的目录
当任何一个python程序启动时,就将上面这些搜索路径(除内置模块以外的路径进行收集放到ys)模块的path属性中(sys.path)