模块可以由两个语句和一个重要的内置函数进行处理
import
使客户端(导入者)以一个整体获取一个模块
from
允许客户端从一个模块文件中获取特定的变量名
imp.reload
在不终止Python程序的情况下,提供了一种重新载入模块文件代码的方法
为什么使用模块
从抽象的视角来看,模块至少有三个角色,如下所示:
代码重用
在模块文件中的代码是永久的,可以按照需要任意次数地重新载入和重新运行模块。除了这一点之外,模块还是定义变量名的空间,被认作是属性,可以被多个外部的客户端引用。
系统命名空间的划分
模块在Python中是最高级别的程序组织单元。从根本上讲,它们不过是变量名的软件包。模块将变量名封装进了自包含的软件包,这一点对避免变量名的冲突很有帮助。
实现共享服务和数据
从操作的角度来看,模块对实现跨系统共享的组件是很方便的,而且只需要一个拷贝即可。例如,如果你需要一个全局对象,这个对象会被一个以上的函数或文件使用,你可以将它编写在一个模块中以便能够被多个客户端导入。
Python程序架构
如何组织一个程序
在Python中,顶层文件(又称脚本)包含了程序的主要的控制流程:这就是你需要运行来启动应用的文件。模块文件就是工具的库,这些工具是用来收集顶层文件(或者其他可能的地方)使用的组件。顶层文件使用了在模块文件中定义的工具,而这些模块是用来其他模块所定义的工具。
导入和属性
标准库模块
Python自带了很多实用的模块,称为标准链接库。参考手册:https://docspy3zh.readthedocs.io/en/latest/library/
import如何工作
程序第一次导入指定文件时,会执行三个步骤:
1. 找到模块文件
2. 编译成位码(需要时)
3. 执行模块的代码来创建其所定义的对象
记住:这三个步骤只在程序执行时,模块第一次导入时才会进行。在这之后,导入相同模块时,会跳过这三个步骤,而只提取内存中已加载的模块对象。从技术上讲,Python把载入的模块存储到一个名为sys.modules的表中,并在一次导入操作的开始检查该表。如果模块不存在,将会启动一个三个步骤的过程。
1. 搜索
Python必须查找到import语句所引用的模块文件
2. 编译(可选)
遍历模块搜索路径,找到符号import语句的源代码文件后,如果必要的话,Python接下来会将其编译成字节码。
注意:只有被导入的文件才会在机器上留下.pyc。顶层文件通常是设计成直接执行,而不是被导入的。设计一个文件,使其作为程序的顶层文件,并同时扮演被导入的模块工具的角色也是有可能的,这类文件既能执行也能导入。
3. 运行
import操作的最后步骤是执行模块的字节码。
模块搜索路径
Python搜索模块的路径:
(1)、程序的主目录
(2)、PTYHONPATH目录(如果已经进行了设置)
(3)、标准连接库目录(一般在/usr/local/lib/python2.X/)
(4)、任何的.pth文件的内容(如果存在的话).新功能,允许用户把有效果的目录添加到模块搜索路径中去.pth后缀的文本文件中一行一行的地列出目录。(有需要的话也会在Lib\site-packages目录下建一个.pth的文件)