Python 中的模块(Module)是组织代码的核心方式,通过将相关函数、类和变量封装到独立文件中,实现代码复用和结构化管理。以下是模块的核心知识点:
一、基础概念
1. 模块定义
- 任何
.py
文件都是一个模块 - 模块名即文件名(不含
.py
后缀)
2. 模块结构
python
# my_module.py
PI = 3.14159 # 模块级变量
def add(a, b):
"""加法函数"""
return a + b
class Calculator:
"""计算器类"""
def subtract(self, a, b):
return a - b
二、模块导入
1. 基础导入
python
import math # 导入整个模块
from datetime import datetime # 导入特定对象
import numpy as np # 导入并设置别名
2. 导入行为
- 首次导入时执行模块代码
- 后续导入直接引用已加载模块
- 模块级代码(如变量定义、函数声明)只会执行一次
三、标准库模块
1. 常用内置模块
模块 | 用途 | 示例方法/类 |
---|---|---|
math |
数学运算 | math.sqrt() , math.pi |
os |
操作系统交互 | os.listdir() , os.path |
sys |
Python解释器相关 | sys.argv , sys.exit() |
datetime |
日期时间处理 | datetime.now() |
json |
JSON数据编解码 | json.dumps() , json.load() |
2. 示例代码
python
import math
print(math.sqrt(16)) # → 4.0
print(math.factorial(5))# → 120
四、第三方模块
1. 包管理工具
bash
pip install requests # 安装模块
pip list # 查看已安装模块
pip freeze > requirements.txt # 导出依赖
2. 虚拟环境
bash
python -m venv myenv # 创建虚拟环境
source myenv/bin/activate # Linux/Mac激活
myenv\Scripts\activate.bat # Windows激活
五、模块搜索路径
python
import sys
print(sys.path) # 输出模块搜索路径列表
# 添加自定义路径(临时)
sys.path.append("/custom/module/path")
六、高级特性
1. 包(Package)
my_package/
├── __init__.py # 包初始化文件
├── module1.py
└── sub_package/
├── __init__.py
└── module2.py
2. 相对导入
python
# 在 sub_package/module2.py 中
from . import module1 # 相对导入同级模块
from .. import utils # 相对导入上级模块
3. 动态导入
python
import importlib
module = importlib.import_module("my_module")
obj = getattr(module, "my_function")
obj()
4. 模块重载
python
from importlib import reload
reload(my_module) # 重新加载已修改的模块
七、最佳实践
1. 模块设计原则
-
单一职责原则:每个模块专注单一功能
-
明确API:通过
__all__
定义公开接口python# my_module/__init__.py __all__ = ["public_func", "PublicClass"]
2. 避免循环导入
python
# 错误示例:a.py 导入 b.py,b.py 又导入 a.py
# 正确做法:重构代码结构,提取公共部分到独立模块
3. 类型提示支持
python
# my_module.py
from typing import List
def process_data(data: List[int]) -> List[float]:
return [x * 1.1 for x in data]
八、实际案例分析
1. 配置管理模块
python
# config.py
DEBUG = False
DB_CONFIG = {
"host": "localhost",
"port": 3306,
"user": "admin"
}
2. 工具函数模块
python
# utils.py
import hashlib
def md5_checksum(data: bytes) -> str:
return hashlib.md5(data).hexdigest()
3. 业务逻辑模块
python
# order_processor.py
from .config import DB_CONFIG
from .utils import md5_checksum
class OrderProcessor:
def __init__(self):
self.db_config = DB_CONFIG
def process(self, order_data):
checksum = md5_checksum(order_data.encode())
# 存储到数据库...
九、常见陷阱
-
命名冲突:
python# 错误示例:与标准库模块同名 import string # 实际导入自定义string.py而非标准库
-
缓存失效:
python# 修改模块后未重新启动解释器导致缓存未更新 # 解决方案:使用reload()或重启Python进程
-
跨平台路径:
python# 使用os.path处理路径而非硬编码 import os config_path = os.path.join("config", "settings.ini")
通过合理组织模块结构,可以构建可维护的大型项目。建议从简单模块开始,逐步掌握包管理和高级导入技巧,最终形成清晰的代码架构。