Python 模块
什么是模块?
在 Python 中,模块是一个包含 Python 定义和语句的文件。文件名就是模块名加上 .py 后缀。模块可以包含函数、类和变量,也可以包含可运行的代码。
模块的优势
- 代码组织:将相关的代码组织在一起,使代码结构更清晰
- 代码重用:可以在不同的程序中重复使用模块
- 命名空间:避免命名冲突
- 封装:隐藏实现细节,只暴露必要的接口
导入模块
基本导入方式
# 导入整个模块
import math
# 使用模块中的函数
result = math.sqrt(16)
# 导入特定函数
from math import sqrt
# 直接使用函数
result = sqrt(16)
# 导入多个函数
from math import sqrt, pow, sin
# 使用别名
import numpy as np
from math import sqrt as square_root
导入所有内容(不推荐)
from math import * # 不推荐,可能导致命名冲突
模块搜索路径
Python 在导入模块时会按照以下顺序搜索:
- 当前目录
- PYTHONPATH 环境变量中的目录
- Python 标准库目录
- site-packages 目录(第三方包安装位置)
创建自己的模块
基本结构
# mymodule.py
def hello():
print("Hello from mymodule!")
class MyClass:
def __init__(self):
self.name = "MyClass"
def say_hello(self):
print(f"Hello from {self.name}")
# 当模块被直接运行时执行
if __name__ == "__main__":
hello()
使用自定义模块
# main.py
import mymodule
mymodule.hello()
obj = mymodule.MyClass()
obj.say_hello()
包(Package)
包是一种特殊的模块,它包含多个模块。包是一个包含 __init__.py 文件的目录。
包的结构示例
mypackage/
__init__.py
module1.py
module2.py
subpackage/
__init__.py
module3.py
导入包中的模块
# 导入包中的模块
import mypackage.module1
from mypackage import module2
from mypackage.subpackage import module3
常用标准库模块
- os:操作系统接口
- sys:系统相关参数和函数
- math:数学函数
- datetime:日期和时间处理
- json:JSON 数据处理
- random:随机数生成
- collections:容器数据类型
- re:正则表达式
最佳实践
- 模块命名:使用小写字母和下划线
- 避免循环导入
- 使用相对导入:在包内部使用相对导入
- 编写文档字符串:为模块、函数和类添加文档
- 使用
__all__:明确指定可导出的名称
# 在模块中定义 __all__
__all__ = ['public_function', 'PublicClass']
模块缓存
Python 会缓存导入的模块,存储在 __pycache__ 目录中。这些 .pyc 文件可以加快模块的加载速度。
虚拟环境
使用虚拟环境可以隔离不同项目的依赖:
# 创建虚拟环境
python -m venv myenv
# 激活虚拟环境
# Windows
myenv\Scripts\activate
# Linux/Mac
source myenv/bin/activate
总结
Python 模块是代码组织和重用的重要机制。通过合理使用模块和包,可以:
- 提高代码的可维护性
- 促进代码重用
- 避免命名冲突
- 实现更好的代码组织
掌握模块的使用对于编写高质量的 Python 程序至关重要。
