⚫ 模块对应于Python源代码文件;
⚫ 多个功能相似的模块可以组织成一个包。
➢ Python中的模块包括系统模块、第三方模块和用户自定
义模块。它们实质上是以.py为扩展名的Python文件
➢ 通过导入模块,可以使用该模块中的变量、函数和类等
模块化程序设计思想
-
如果程序中包含多个可以复用的函数或类,则通常把相关的函数和类分 组包含在单独的模块(module)中。这些提供计算功能的模块称之为模
块(或函数模块),导入并使用这些模块的程序,则称之为客户端程序。 -
把计算任务分离成不同模块的程序设计方法,称之为模块化编程 (modular
programming)。使用模块,可以将计算任务分解为大小合理 的子任务,并实现代码的重用功能。
模块的API
• 客户端使用模块提供的函数时,无须了解其实现细节;
• 模块和客户端之间遵循的契约称之为API(Application Programming Interface,应用程序编程接口);
• API用于描述模块中提供的函数的功能和调用方法。
• 模块化程序设计的基本原则是先设计API(即模块提供的函数或类的功能 描述),然后实现API(即编写程序,实现模块函数或类),最后在客户 端中导入并使用这些函数或类;
• 通过内置函数help(),可以查看Python模块的API
API设计
• API定义客户端和实现之间的契约。API是一个明确的规范,规定“实现” 的具体功能是什么
• API通常由两部分组成:可用函数的签名的精确规范,以及描述函数作 用的非正式自然语言描述。API一般使用表格的形式,描述模块中的变 量、函数和类
模块设计的一般原则
• (1)先设计API,再实现模块
• (2)控制模块的规模,只为客户端提供需要的函数。实现包含大量函数的模 块会导致模块的复杂性。例如,Python的math模块中就不包含正割函数、余 割函数和余切函数,因为这些函数很容易通过函数math.sin()、math.cos()和 math.tan()的计算而得
• (3)在模块中编写测试代码,并消除全局代码
• (4)使用私有函数实现不被外部客户端调用的模块函数
• (5)通过文档提供模块帮助信息
模块的实现的概念
• “实现”是指实现用于重用的函数或类的代码,模块的实现就是若 干实现函数或类的代码的集合,保存在一个后缀为.py的文件中;
• 模块的实现必须遵循API规约,可以采用不同算法实现API,这为模 块的改进和版本升级提供了无缝对接,只需要使用遵循API的新的实 现,所有客户端程序无须修改即可以正常运行。
模块的客户端
• 客户端遵循API提供的调用接口,导入和调用模块中实 现的函数功能;
• API允许任何客户端直接使用模块,而无需检测模块中 定义的代码,例如可以直接使用模块math和random等。
模块化程序设计的优越性
• 可以编写大规模的系统程序
• 控制程序的复杂度
• 实现代码重用
• 增强可维护性
模块导入方式(import)
– | 方式一 | 方式二 |
---|---|---|
模块的导入 | import 模块名 | from 模块名 import 函数名 或:from 模块名 import |
导入示例 | import combinatorial | from combinatorial import fac,comb 或者:from combinatorial import |
函数调用 | 模块名.函数名 | 函数名 |
函数调用示例 | combinatorial.fac(10) | fac(10) |
创建模块
• Python模块对应于包含Python代码的源文件(其扩展 名为.py),在文件中可以定义变量、函数和类;
• 在模块中,除了可以定义变量、函数和类之外,还可 以包含一般的语句,称之为主块(全局语句)。当运 行该模块,或导入该模块时,主块语句将依次执行。
➢ Python文件中的每个文件都可以做为一个模块存在,文
件名即模块名。