模块
当程序代码过多,我们可以将特定功能的代码定义成函数(子程序),但是如果函数太多,全部编写在一个程序文件中是不合适的,不利于阅读和修改。
如果函数较多,我们可以按功能分类,将它们分开写在不同的程序文件中,然后在主程序中只需将这些文件导入即可。
这些存放函数代码的文件我们称为“模块”,模块文件的后缀名也是.py
import语句
导入一个模块文件,不需要加后缀名.py,例如:
inport student
执行这个语句时,python解释器会去指定的路径搜寻student.py文件,并将其内容导入当前程序文件中。接下来,在本程序中就可以使用用student.py中的函数和全局变量。但是,使用时函数或变量名前面要加上模块名,例如:
student.ppp()
不管你执行了多少次 import,一个模块只会被导入一次。这样可以防止导入模块被一遍又一遍地执行。
标准模块
python自带了标准模块库,其中提供了大量功能函数可供我们使用。例如:sys模块
import sys
模块搜寻路径
模块的搜寻路径保存在sys.path变量中,可以将其输出,也可以修改它的值,以设置模块的搜寻路径。
包
开发大型项目时,往往需要多个程序员合作开发,每个人负责自己的模块,当模块较多时,模块名字也很容易冲突,所以我们还需要用包来组织和管理模块。
包名可以分很多层,包与模块的关系就像文件夹与文件的关系。
例如,程序员jack开发了一些用于数据库操作的模块文件,这些模块可以使用包名:jack.sql,而且这些模块文件也应该存放在与包名相对应的文件夹结构中。
当我们需要导入有包名的模块时,必须指定包名,例如:
improt jack.sql.模块名
使用模块中的函数或变量时,前面都要加上包名和模块名。
命名空间
在不同的模块中定义的函数和变量命名是互相不冲突的,。
from ... import语句
从模块中导入一个指定的部分到当前命名空间中,例如:
from jack.sql import 模块名
使用这个模块中的函数或变量都不再需要带前缀。
编程练习
将之前编写的程序定义成函数,按功能分类分别放在不同的模块,这些模块放在以自己名字命名的包里。最后用一个主程序来调用这些函数。