目录
模块
模块化程序设计理念
标准库模块
模块化编程的流程
模块的API和功能描述要点
模块的导入
import语句导入
模块的加载问题
from……import导入
import与from……import语句的区别
——import——()动态导入
包(package)的使用
包(package)的概念和结构
导入包操作和本质
用*导入包
包内引用
sys.path和模块搜索路径
模块 模块化程序设计理念
1.Python程序由模块组成。一个模块对应Python源文件,一般后缀名是:py
2.模块由语句组成,运行Python文件时,按照模块中语句的顺序依次执行
3.语句是Python程序的构造单元,用于创建对象,变量赋值,调用函数,控制语句等
标准库模块
与函数类似,模块也分为标准库模块和用户自定义模块
模块化编程:将一个任务,分解成多个模块,每个对象就像一个积木一样,便于后期的反复使用,反复搭建
模块化编程的流程
1.设计API,进行功能描述
2.编程实现API中描述的功能
3.在模块中编写测试代码,并消除全局代码
4.使用私有函数实现不被外部客户端调用的模块函数
模块的API和功能描述要点
API(Application Programming Interface(应用编程接口)):是用于描述模块中提供的函数和类的功能
描述和使用方法描述
模块化编程中,首先设计的就是模块的API(既要实现的功能描述),然后开始编码实现API中描述的功能,最后,在其他模块中导入本模块进行调试
可通过help(模块名)查看模块的API
模块的导入
模块化设计的好处之一就是“代码复用性高”,写好的代码可被重复调用、重复使用,模块的导入就是在“本模块中使用其他模块”
import语句导入
import语句的基本语法格式:
import 模块名 #导入一个模块
import 模块1,模块2…… #导入多个模块
import 模块名 as 模块别名 #导入模块并使用新名字
import加载的模块分为四个通用类别:
a.使用python编写的代码
b.已被编译为共享库或DLL的C或C++扩展
c.包好一组模块的包
d.使用C编写并链接到python解释器的内置模块
一般通过import语句实现模块的导入和使用import本质上是使用了内置函数——import——()
模块的加载问题
当导入一个模块时,模块中的代码都会被执行,不过如果再次导入,其实例对象与前一次相同
一个模块无论导入多少次,这个模块在整个解释器进程内有且只有一个实例对象
from……import导入
Python中可使用from……import导入模块中的成员,语法格式:
from 模块名 import 成员1,成员2……
如果希望导入一个模块中的所有成员,则可采用如下方式:
from 模块名 import *
尽量避免“from 模块名 import *”这种写法,它表示把模块中所以的不是以下划线——开头的名字都导入当前位置
import与from……import语句的区别
import导入的是模块,from……import导入的是模块中的一个类(或函数)
若进行类比的话,import导入的是”文件“,要使用该文件下的内容,必须在前面加”文件名称“,from……import导入的是文件下的”内容“,使用时,直接使用即可,无需加”文件名称“
——import——()动态导入
import语句本质是调用内置函数——import——(),可通过其实现动态导入,给——import——()动态传递不同的参数值,就能导入不同的模块
一般不建议自行使用——import——()导入,其行为在python1和python3中存在差异,会导致意外错误,若需动态导入可使用importlib
包(package)的使用 包(package)的概念和结构
当一个项目中有很多模块时,需要在进行组织,将功能类似的模块放在一起,形成”包(package)“。本质上,”包(package)“就是一个必须有——init——.py的文件夹
包下面可以包含”模块module“,也可以包含”子包subpackage“,就像文件夹下可以有文件也可以有文件夹一样
导入包操作和本质
基本结构:#aa.py,a.py为创建的包,module—AA为其包下的py源文件(模块)
import a.aa.module—AA
在使用时,必须加完整名称来引用
2.from a.aa import module—AA
在使用时,可以直接使用模块名
3.from a.aa.module—AA import fon—AA
在使用时,可直接使用函数名
1.from package import item这种语法中,item可以是包、模块,也可以是函数、类、变量
2.import item,item……,这种语法中,item必须是包或者模块,不能是其他
3.——init——()的三个核心作用
(1)作为包的识别,不能删除
(2)用来实现模块导入
(3)导入包实质执行——init——.py文件,可以在——init——.py这个文件中做这个包的初始化,以及需要统一执行的代码
用*导入包
import *这样的语句理论上是希望文件系统找出包中所有的子模块,然后导入它们,但这可能会花费大量时间,python的解决方法是提供一个明确的包索引
尽管提供import *的方法,仍不建议在生成代码中使用这种写法
包内引用
若是子包内的引用,可以按相对位置引入子模块,以aa包下的module—AA中导入a包下内容为例
from..import module—AA #..表示上级目录
from.import module—AA #.表示同级目录
sys.path和模块搜索路径
按照顺序查找
1.内置模块
2.当前目录
3.程序的主目录
4.python目录(若设置)
5.标准链接库目录
6.第三方目录库(site—packages目录)
7..pth文件的内容(若存在)
8.sys.path.append()临时添加的目录
当任何一个python文件启动时,就将以上这些搜索路径(除内置模块以外的路径)进行收集,放到sys模块的path属性中(sys.path)