模块和包¶
模块和包的命令都应遵循python变量的命名规则。
一、模块¶
本质就是一个.py文件,封装语句的最小单位,是一系列功能的集合体。使用模块可以提高开发效率,便于维护和管理。
1. 模块的分类¶
-
内置模块
-
第三方模块、扩展模块
-
自定义模块
2. 模块的形式¶
- 使用python编写的源代码文件(.py文件)
- 字节码文件(.pyc)
- 用C或C++编写的编译扩展模块,导入时使用动态链接(linux的.so、Cygwin或Windows的.dll)
- 把一系列模块组织到一起的文件夹(包)
- 使用C编写并链接到python解释器的内置模块
- zip文件,导入时自动解压缩
3. 模块的搜索路径¶
- 程序主目录
- PYTHONPATH目录
- 标准库目录
.pth
文件中的内容(不常用)- 第三方扩展应用的
site-packages
主目录
1 2 3 4 5 6 7 |
|
4. 模块的运行方式¶
- 脚本方式:直接用解释器执行
- 模块方式:被其他的模块导入执行,为导入它的模块提供资源(变量、函数定义、类定义等)。
自定义模块被其他模块导入时,其中的可执行语句会立即执行。
5. 模块的导入¶
5.1 导入模块的规范¶
1 2 3 4 5 |
|
5.2 导入模块时发生了什么¶
5.2.1 导入的三个步骤¶
程序第一次导入指定文件时,会执行三个步骤:
- 找到模块文件
- 编译成字节码
- 执行模块的代码来创建其所定义的对象
之后再导入相同的模块时会跳过这三个步骤,而只是提取内存中已加载的模块对象,python会把已加载的模块存储到sys.modules
字典中。
5.2.2 导入模块时执行的三件事¶
- 在内存中创建以模块名称命名的名称空间
- 从头到尾依次执行该模块文件内的语句,文件顶层的(不在def或class之内)赋值名称的语句(=或def)会创建模块对象的属性,赋值的名称会存储在模块的命名空间内。
- 通过
模块.
的方式调用此模块中的内容
5.3 导入模块的方式¶
5.3.1 import
¶
语法格式
1 2 |
|
import
会整体读取一个模块,使用名称时需要加上模块名。
1 2 |
|
5.3.2 from
¶
语法格式
1 2 3 |
|
from
从模块中读取特定的名称,使用时不需要加模块名。
1 2 |
|
使用别名alias
- 给成员取别名,避免名称冲突
from xxx import zzz as y
- 给模块取别名,简化熟悉
import xxx as y
使用__all__
控制被导入的成员¶
from xxx import *
控制成员被导入,__all__
是一个列表,用于表示本模块可以被外界使用的成员,元素是成员的字符串。
1 2 |
|
6. __name__
属性¶
每个模块内有一个名为__name__
的内置属性。
-
如果文件作为顶层程序文件(脚本方式)执行时,
__name__
值为字符串__main__
, -
如果文件被当做模块导入时,
__name__
的值为就是本模块的名字。
二、模块包¶
包就是一个包含有__init__.py
文件的文件夹
1. 导入包的方式¶
1 2 |
|