一个复杂的Python程序一般是由团队合作开发完成的,这就要求团队成员各自负责部分Python程序的代码编写。例如在一个图书馆借书管理系统中,可能会把整个系统划分为图书管理、借书管理、读者管理、财务结算四个功能模块,系统的每个功能模块由团队的一个成员负责编写程序代码。这就是模块化编程的概念,模块化编程既有利于把复杂的功能分解为简单的功能,也有利于团队成员工作的划分,而且能够增加代码的共用性和可读性。

既然是团队合作编程,Python代码就不能写到一个文件中,至少每个团队成员负责的那块代码要单独建立一个代码文件。例如在前面的图书馆借书管理系统中至少要分成四个py文件,每个团队成员在自己负责的py文件中编写程序代码。

python模块prettytable python模块化编程_Python

图1 图书馆借书管理系统模块划分

模块化编程实际上是从逻辑上将代码划分为多个代码文件,这些代码文件独立完成程序的一些功能,但彼此也有交互。例如上图的borrow.py文件主要是完成读者借书、还书、借书费用的结算功能,它需要引入finance.py文件,使用该文件的结算功能完成借书费用的结算。

python模块prettytable python模块化编程_模块化编程_02

图 2 图书馆借书管理系统代码划分

上图是使用eclipse开发环境构建的Python项目资源图,这个项目资源图对应图1所示的图书馆借书管理系统模块划分图。其中图书管理模块对应book.py文件,借书管理模块对应borrow.py文件,读者管理模块对应reader.py文件,财务结算模块对应finance.py文件。

在上图中“manager”是包名称,包类似于文件系统中的文件夹,它可以允许在一个包中容纳更多的代码文件,一个代码文件就是一个程序模块,包中还可以包含子包,形成一个树形结构。这种树形结构的组织方式,易于找到和使用相应的代码文件。

包“manager”下面是模块文件,同一包下的模块文件名称不能相同,不同包下的模块文件名称可以相同。从图中可以看出,“manager”包下面有book.py模块、borrow.py模块、reader.py模块、finance.py模块。

前面说到了borrow.py模块需要引用finance.py模块的结算函数。那么一个模块如何引用其它模块,并使用其它模块的函数呢?Python语言提供了import语句用于导入外部模块,它的语法如下:

import module1
import module2
……
import moduleN

也可以在一行内导入多个模块:

import module1, module2 …… moduleN

但是这样代码的可读性不如单行的导入语句。所以一般情况下,使用第一种导入方法。

Python解释器在执行到导入语句时,会根据import后面的模块路径来查找模块,如果找到了指定的模块就会加载,否则模块加载失败。当外部模块在当前模块顶部导入时,导入的模块作用域是全局;当外部模块在当前模块函数内部导入时,导入的模块作用域是局部的,仅限于函数内部使用。

在Python语言中代码的组织结构为包和模块,包类似于Java的Package,在一个包内可以包含子包;模块类似于Java的类文件,在模块中可以使用import语句导入其它模块,并可以使用其它模块中的函数。