模块对应于python源代码文件;
多个功能相似的模块可以组织成一个包。
python中的模块包括系统模块、第三方模块和用户自定义模块。实质上是以.py为扩展名的python文件。
通过导入模块,可以使用该模块中的变量、函数和类等。
模块化程序设计的概念
如果程序中包含多个可以复用的函数或类,则通常把相关的函数和类分组包含在单独的模块中。这些提供计算功能的模块称之为模块(或函数模块),导入并使用这些模块的程序,则称之为客户端程序。把计算任务分离成不同模块的程序设计方法,称之为模块化编程。使用模块,可以将计算任务分解为大小合理的子任务,并实现代码的重用功能。
模块的API(Application Programming Interface)
客户端使用模块提供的函数时,无须了解其实现细节;
模块和客户端之间遵循的契约称之为API(应用程序接口);
API用于描述模块中提供的函数的功能和调用方法。
模块化程序设计的优越性
可以编写大规模的系统程序;
控制代码的复杂度;
实现代码重用;
增强可维护性;
模块的导入
模块导入方式(import)
方法 | |
---|---|
模块的导入 | 方式一:import模块名 方式二:from模块名import函数名或 from模块名import* |
导入示例 | import combinatorial;from combinatorial import fac,comb或者:from combinatorial import* |
函数调用 | 模块名.函数名;函数名 |
函数调用示例 | combinatorial.fac(10)或者fac(10) |
模块导入(import)
使用import格式导入模块时,模块中的所有内容都会被导入到当前程序中,import的用法如下:
import 模块1,模块2,……
使用import可一次导入多个模块,每个模块名之间使用“,”分割。在命令行中导入某个模块,用户便可调用指定模块中的任意方法,调用模块中方法的方式如下:
模块.方法()
模块导入(from 模块名 import 方法/类/对象)
模块导入(from 模块名 import*)
创建模块
python模块对应于包含python代码的源文件(其扩展名为.py),在文件中可以定义变量、函数和类;还可以包含一般的语句,称之为主块(全局语句)。当运行该模块,或导入该模块时,主块语句将依次执行。
python 文件中的每个文件都可以做为一个模块存在,文件名即模块名。
模块的搜索路径
模块搜索路径即python搜索模块时的路径,这些路径存储于sys模块中的sys.path属性中,用户可先在解释器中导入sys模块,再查看sys.path的值,如下:
sys.path的本质是列表,因此用户可通过列表的内置方法append动态地向sys.path中添加模块所在路径。假设将路径“sys.path.append(“C:\Users\Lenovo.ipython”)”添加到搜索路径中,其如下:
模块的导入顺序
导入模块时,解释器按下列目搜索路径和文件搜索顺序查找并导入文件。目录搜索路径为:
(1)当前目录。启动交互式python的目录,或python主程序位于的目录。
(2)操作系统环境变量PYTHONPATH中指定的目录。
(3)python标准库目录。
模块搜索路径sys.patn
sys模块的sys.path属性返回一个路径列表;
使用import语句导入模块时,系统自动从该列表的路径中搜索模块,如果没有找到,则程序报错。
模块的测试代码
(1)每个模块都有一个名称,通过特殊变量_name_可以获取模块的名称;
(2)特别的,当一个模块被用户单独运行时,其_name_的值为‘name’。故可以把模块源代码文件的测试代码写在相应的测试判断中,以保证只有单独运行时,才会运行测试代码。
直接运行模块代码_name_取值“_main”;
导入模块时,_name_取值为模块名称。
模块的导入特性:
模块在被导入时,会被执行一次,这个过程叫做加载。一个模块即便被多次导入程序,也只会被加载。
模块的缓存:
按字节编译的.pyc文件
(1).pyc文件是经过编译后的字节,这样下次导入时,如果模块源代码.py文件没有修改(通过比较两者的时间截),则直接.pyc文件,从而提高程序效率;
按字节编译的.pyc文件是在导入模块时,python解释器自动完成,无需程序员手动编译。
包及模块的打包发布
包是python引入的分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的python的应用环境。引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。
每一个python的包目录下面都会有名为_init_.py的特殊文件,该文件可以为空文件,但是必须存在,它表明这个目录不是普通的目录结构,而是一个包,里面包含模块。
模块的打包发布
用户可将自己编写的模块打包为可安装的压缩包,分享给其它开发人员。
将待发布的包放在与setup.py文件同级的目录中,
编辑setup.py脚本文件,setup.py文件中包含内容如下:
在当前路径下打开命令行窗口,使用包含一个名为lib的目录,该目录中存储了待发布模块的备份。build文件夹中的目录结构如下所示:
用户可通过sdist命令建立存放文件:
注:本文根据嵩天老师《python语言程序设计基础》做的笔记