
4.2.2 导入模块
在安装Python时,默认安装仅包含部分基本或核心模块。在启动Python时,也仅加载了很少的模块,这样可以减少程序运行的压力。在需要某些模块时,再由程序员加载。
使用Python编程时,有些功能可以借助Python现有的标准库或者其他人提供的第三方库。比如,cos()、fabs()等数学函数位于Python标准库中的math(或cmath)模块中,只需要将此模块导入当前程序,就可以直接使用。
模块的文件类型有.py、.pyo、.pyc、.pyd、.so、.dll等。Python中有3种导入模块的方法。
1.import语句
使用import语句导入模块,会导入指定模块中的所有成员(包括变量、函数、类等)。import语句的语法格式为:

说明:
1)用这种方式导入的模块,是在当前的命名空间中建立了一个该模块的引用。这种引用须使用全称,即在导入模块中的函数或属性时,必须加上模块的名字,如“模块名.函数名”。
2)用import语句可以导入多个模块。import语句放在程序的头部,建议按照下述顺序导入:Python标准库模块、Python第三方模块、自定义模块。
3)导入模块时,可以使用as关键字改变模块的引用对象名称。
4)多次导入一个模块不会多次执行该模块导入操作,只会执行一次。
5)在调用模块中的函数时,必须按如下方式引用:

【例4-30】 导入数学模块和随机数模块。

2.from import语句
如果不需要把整个模块导入当前的命名空间,而是将该模块中指定的对象导入,即有选择地导入某些属性和函数,则使用如下语法格式:

说明:
第二种导入方式和第一种导入方式的区别是所导入的对象直接导入本地命名空间,因此在访问这些对象时不需要加模块名。但是,如果当前模块中的属性或函数与要导入的模块有命名冲突,必须使用“模块名.函数名”的形式来避免冲突。
【例4-31】 导入数学模块中的正弦函数。

3.模块搜索路径
当执行装载模块时,需要知道模块所在的位置,Python的搜索路径如下。
1)首先在当前目录中查找需要导入的模块文件。
2)如果没有找到,则在环境变量pythonpath指定的路径表中查找。
3)如果还没有找到,则在Python安装路径中查找。
4)如果仍然没有找到模块文件,则提示模块不存在。
对于上述路径搜索顺序,如果前两个搜索路径中存在与标准模块同名的模块,则标准模块将被覆盖。
其实,上述搜索路径都包含在变量sys.path中。如果要添加新路径,可以通过sys.path.append("路径")函数添加新路径到搜索路径表中。当目录较复杂时,也可以通过添加环境变量的方式增加搜索路径。
【例4-32】 导入sys模块,用sys.path显示搜索路径列表,然后添加新的搜索路径。

在大型的程序中需要导入很多模块,应按照以下顺序依次导入模块。
1)导入Python标准库模块,如os、sys、re。
2)导入第三方扩展库。
3)导入自定义的本地模块。