模块
模块(module)
模块就是一个 Python 文件,内部可以包含变量、函数、类等。通过模块,我们可以将代码组成成可重用的单元,便于管理和维护。
模块的作用:
代码复用:将常用的功能封装到模块中,可以在多个程序之间重复使用。
命名空间管理:模块可以有效的避免命名冲突,不同模块中的命名函数和便利不会相互干扰。
导入模块
# 导入整个模块
import math_utils
math_utils.add(1, 2)
# 只导入指定内容
from math_utils import add, sum
add(1, 2)
sum(1, 2)
# 使用别名
import math_utils as mu
mu.add(1, 2)
import math_utils add as sum;
sum(1, 2)
# 把一个模块中的所有内容全部导入
from math_utils import *
一个模块只会被导入一次,不管执行来多少次 import
语句。
模块的搜索路径
当导入一个模块时,Python 会按照 sys.path
中的路径顺序去查找模块,包括:
当前目录
环境变量
PYTHONPATH
中的目录安装目录中的标准库。
你可以通过如下方式查看搜索路径。
import sys
print(sys.path)
加速模块加载
为了加速模块的加载速度,Python 会将每个模块的编译版本(如*.pyc)缓存在__pycache__
目录中。生成编译文件 pyc 的详细过程,可以参考文档PEP 3147。
Python 会根据编译版本检查源代码的修改日期,以查看它是否已过期并需要重新编译。
包(Packages)
包是一个包含多个模块的目录,该目录下必须包含一个__init__.py
文件(Python3.3 起可以省略,建议保留以便兼容)
my_package/
├── __init__.py
├── module1.py
└── sub_package/
├── __init__.py
└── module2.py
导入包和模块
# 导入包下的模块
form my_package import module1;
# 导入子包下的模块
from my_package.sub_package import module2;
init.py的作用
把目录当作包使用
可以在其中定义包级别的变量或者导出模块。
可以用
__all__
控制from package import *
的导入项。
# my_package/__init__.py
__all__=[1module1"] # 只导出 module1
Last updated