2.2.2 模块化程序设计的抽象概念

Python语言程序设计一个最重要的特点是预定义的海量函数,事实上成千上万个Python模块可供编程使用。本节则关注一个更为重要的观念:用户可自定义模块,自定义模块实际上是包含若干互相关联的函数的Python文件,这些函数可被其他程序使用。一个Python模块(或模块库)不可能包含给定计算所需要的所有函数,所以创建自定义模块是解决复杂计算问题的关键步骤。要管理这个过程,我们采用一种经过时间考验的方法,这种方法为我们的开发提供了很大的灵活性。接下来,我们将依次阐述作为该方法基础的三个抽象概念。

1. 实现(Implementation)

我们采用通用术语“实现”来描述实现重用的若干函数的代码。一个Python模块就是一种实现:若干函数的集合使用名称module表示,并保存在一个module.py文件中。例如,如前所述,程序gaussian.py就是一种实现。选择若干合适的函数组合并予以实现是一种设计艺术,这是开发一个大型程序的核心挑战。

模块设计的指导性原则是:为客户端提供需要的函数,不要包含其他多余内容。实现包含大量函数的模块会成为一个负担,而缺少重要函数的模块对客户端而言没有必要。前文已经包含遵循上述原则的许多示例。例如,Python的math模块中就不包含正割函数、余割函数和余切函数,因为这些函数很容易通过函数math.sin()、math.cos()和math.tan()的计算得到。

2. 客户端(Client)

我们使用通用术语“客户端”表示使用一个实现的程序。一个调用定义在文件名为module.py中函数的Python程序(脚本程序或模块)就是模块module的一个客户端。例如,如前所述,gaussiantable.py就是gaussian.py的客户端。典型地,一个模块可以有多个客户端,所有用户编写的调用math.sqrt()的程序都是Python的math模块的客户端。实现一个新的模块时,必须清楚模块将为客户端做什么。 ...

Get 程序设计导论:Python语言实践 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.