常见的场景:一个模块就是一个包含了一组功能的python文件,比如spam.py,文件名为spam,可以通过import spam使用
模块分类:(四个通用类别)
1、使用python编写的.py文件
2、已被编译为共享库或DLL的C或C++扩展
3、把一系列模块组织到一起的文件(注:文件下有一个__init__.py文件,该文件夹称之为包)
4、使用C编写并链接到python解释器的内置模块
为什么要使用模块
1、从文件级别组织程序,更方便管理
2、可以下载导入别人写好的模块,提升开发效率
模块之import
1、import的使用
模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,他们只在模块名第一次遇到导入import语句时才执行(第一次导入 import模块名就加载到内存中了,后续的import语句只是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句)
如:
import spam
import spam
import spam
'''
执行结果:
from the spam.py
'''
2、在第一次导入模块时会做三件事,重复导入会直接引用内存中已经加载好的结果
(1)、为源文件(spam模块)创建新的名称空间,在spam中定义的函数和方法若是使用到了global时访问的就是这个名称空间
(2)、在新创建的命名空间中执行模块中包含的代码,见初始导入import spam
提示:导入模块时到底执行了什么? In fact function definitions are also ‘statements’ that are ‘executed’; the execution of a module-level function definition enters the function name in the module’s global symbol table. 事实上函数定义也是“被执行”的语句,模块级别函数定义的执行将函数名放 入模块全局名称空间表,用globals()可以查看
(3)、创建名字spam来引用该命名空间
3、被导入模块有独立的名称空间
每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会被导入时,与使用者的全局变量冲突
4、为模块起别名
为已经导入的模块起别名的方式对编写可扩展的代码很有用
5、在一行导入多个模块