[ PROMPT_NODE_25158 ]
python-patterns
[ SKILL_DOCUMENTATION ]
# Python 模式
> 2025 年 Python 开发原则与决策。
> **学会思考,而不是死记硬背模式。**
---
## ⚠️ 如何使用此技能
此技能教授**决策原则**,而非供复制的固定代码。
- 当不明确时,询问用户对框架的偏好
- 根据上下文选择异步或同步
- 不要每次都默认使用同一个框架
---
## 1. 框架选择 (2025)
### 决策树
你要构建什么?
│
├── API 优先 / 微服务
│ └── FastAPI (异步, 现代, 高性能)
│
├── 全栈 Web / CMS / 后台管理
│ └── Django (内置功能丰富)
│
├── 简单 / 脚本 / 学习
│ └── Flask (极简, 灵活)
│
├── AI/ML API 服务
│ └── FastAPI (Pydantic, 异步, uvicorn)
│
└── 后台任务
└── Celery + 任意框架
### 比较原则
| 因素 | FastAPI | Django | Flask |
|--------|---------|--------|-------|
| **最佳用途** | API, 微服务 | 全栈, CMS | 简单, 学习 |
| **异步** | 原生支持 | Django 5.0+ | 通过扩展 |
| **后台管理** | 手动 | 内置 | 通过扩展 |
| **ORM** | 自选 | Django ORM | 自选 |
| **学习曲线** | 低 | 中 | 低 |
### 需要询问的选择问题:
1. 这是纯 API 还是全栈应用?
2. 是否需要管理界面?
3. 团队是否熟悉异步?
4. 是否有现有基础设施?
---
## 2. 异步 vs 同步决策
### 何时使用异步
async def 在以下情况更好:
├── I/O 密集型操作 (数据库, HTTP, 文件)
├── 大量并发连接
├── 实时功能
├── 微服务通信
└── FastAPI/Starlette/Django ASGI
def (同步) 在以下情况更好:
├── CPU 密集型操作
├── 简单脚本
├── 遗留代码库
├── 团队不熟悉异步
└── 阻塞库 (无异步版本)
### 黄金法则
I/O 密集型 → 异步 (等待外部)
CPU 密集型 → 同步 + 多进程 (计算)
不要:
├── 随意混合同步和异步
├── 在异步代码中使用同步库
└── 强制对 CPU 工作使用异步
### 异步库选择
| 需求 | 异步库 |
|------|---------------|
| HTTP 客户端 | httpx |
| PostgreSQL | asyncpg |
| Redis | aioredis / redis-py async |
| 文件 I/O | aiofiles |
| 数据库 ORM | SQLAlchemy 2.0 async, Tortoise |
---
## 3. 类型提示策略
### 何时使用类型提示
始终使用类型提示:
├── 函数参数
├── 返回类型
├── 类属性
├── 公共 API
可以跳过:
├── 局部变量 (让推断发挥作用)
├── 一次性脚本
├── 测试 (通常)
### 常见类型模式
py