一个月 Python 进阶路线(2026-09-08 → 10-07)¶
定位:接在 Day 1–3 之后,把 Python 从"会写小程序"练到"能写工程化服务"——语言进阶、工程规范、类型系统、Pydantic、日志/正则/文件/SQLite、并发与 asyncio、httpx、FastAPI、测试进阶、架构与封装。本仓库只讲 Python;LLM、agent、MCP 等归
learn-agent仓库。但每个模块都标注了它是learn-agent哪一天的前置知识,两条线可以对照推进。时间盘子(按你给的数字 + 国务院 2026 年假期安排核实):工作日晚自习 18:00–22:00 = 4h;周六日、中秋(9/25–27)、国庆(10/1–7)每天 10h+;9/20(周日)调休上课,只有 4h。Day 3 之后合计约 198 小时在座时间、约 150 小时有效学习。
与
learn-agent的冲突:它也排在 9/7–10/6、约 170 小时。同一批小时不能用两次。本路线按"Python 独占全部时间"排出完整版,同时给出并行版最低配置(第 6 节);你自己决定怎么切分,两份计划都不会因此失效——本路线的模块是可拆卸的,每个模块标了小时数与前置依赖。
1. 一个月后你能做到什么¶
- 读懂并写出使用生成器、装饰器、上下文管理器、数据模型(魔术方法)、
Protocol、dataclass/Enum的代码,说出每种写法解决什么问题。 - 用 src 布局 +
pyproject.toml+ uv 组织一个可安装、有命令行入口、有类型检查、ruff 零警告、pytest 覆盖率 ≥80% 的包,并用 Git 提交到 cnb.cool。 - 用 Pydantic 定义带约束的数据模型、做校验与序列化、生成 JSON Schema、用
pydantic-settings管配置与密钥。 - 正确使用
logging(分级、格式、文件轮转、JSON 结构化)、正则、pathlib、json/tomllib/csv、sqlite3。 - 判断一个任务该用 asyncio、线程还是进程,写出结构化并发的 asyncio 代码(
TaskGroup、超时、取消、限流),用httpx做同步/异步/流式 HTTP 请求并正确重试。 - 用 FastAPI 写一个分层清晰(路由 / 服务 / 仓储 / 模型)、有依赖注入、有 SSE 流式端点、有测试的 HTTP 服务,并能在 Linux 服务器上跑起来。
- 交付综合项目 Notebook Service(第 7 节):它的每一块都是
learn-agent里 StudyBuddy 要用的积木(FastAPI + SSE、SQLite 记忆、Pydantic 模型、httpx 客户端、日志、测试)。
2. 日历¶
节奏:工作日晚上 = 复习 + 1 个新知识块 + 练习(3 个 50+10 块 + 40 分钟收尾);周末/假期 = 8 个块(上午 3、下午 3、晚上 2)+ 1 小时复盘。每周日晚(或该周最后一个大块日):周测 40 分钟(闭卷)+ AI 代码评审 30 分钟。每周一晚开头:上周内容 15 分钟闭卷回忆。
| 周 | 日期 | 在座时长 | 主题 | 周产出 |
|---|---|---|---|---|
| 0 | 9/5 六 – 9/7 一 | 10 + 10 + 4 | Day 1–3(已有计划) | 成绩单 v2、周一项目 |
| 1 | 9/8 二 – 9/13 日 | 4×4 + 10×2 = 36h | 语言进阶:迭代器/生成器、闭包/装饰器、上下文管理器、数据模型与魔术方法、OOP 进阶、异常进阶、3.12–3.14 语法 | 小项目 文本处理管线(生成器管线 + 装饰器注册表) |
| 2 | 9/14 一 – 9/20 日 | 4×5 + 10 + 4 = 34h | 工程化:项目结构与 uv 打包、Git/cnb.cool、typing 进阶与类型检查器、ruff/docstring 规范、Pydantic、logging、配置与密钥、正则、文件与序列化、SQLite | 小项目 知识库 CLI(typer + Pydantic + SQLite + logging) |
| 3 | 9/21 一 – 9/27 日 | 4×4 + 10×3 = 46h | 并发与网络:pytest 进阶、线程/进程/subprocess、asyncio、httpx 与重试/流式、性能测量 |
小项目 并发抓取聚合器(async httpx + 限流 + 重试 + 测试) |
| 4 | 9/28 一 – 10/4 日 | 4×3 + 10×4 = 52h | 服务与架构:HTTP/REST、FastAPI(4 天)、分层与封装、安全基础、Linux 上运行;10/3–10/4 开始综合项目 | Notebook Service v0.1 |
| 收官 | 10/5 一 – 10/7 三 | 10×3 = 30h | 综合项目完成、结业测验、三档复评、复盘与后续路线 | Notebook Service v1.0 + 复盘 |
3. 模块总表(小时数 = 在座时间;档位 = 该模块的核心要求)¶
| # | 模块 | 周 | 时长 | 前置 | learn-agent 触点 |
|---|---|---|---|---|---|
| M1 | 迭代器、生成器、itertools |
1 | 6h | Day 2 | 流式输出的 Python 基础(生成器/异步生成器) |
| M2 | 闭包、装饰器、functools、inspect |
1 | 8h | M1 | Day 3 @tool 装饰器、inspect.signature |
| M3 | 上下文管理器;函数式工具的定位 | 1 | 4h | M2 | 资源管理、async with |
| M4 | 数据模型与魔术方法、dataclass/Enum 进阶、OOP 进阶(组合、ABC、Protocol) |
1 | 10h | Day 2 | 工具/消息/记忆的领域模型;Protocol 定义接口 |
| M5 | 异常进阶;3.12–3.14 语法专题(match 进阶、PEP 695、t-strings) |
1 | 4h | Day 2 | 工具错误如何变成模型可读文本 |
| M6 | 项目结构、uv 打包、入口点、PEP 723 脚本;Git 工作流与 cnb.cool | 2 | 6h | Day 3 | Day 1 环境;每天提交 |
| M7 | typing 进阶、类型检查器(ty/pyright)、ruff 规则、docstring 规范 | 2 | 6h | M4 | Day 2 类型注解 → JSON Schema |
| M8 | Pydantic:模型、字段、校验、序列化、JSON Schema、Settings | 2 | 8h | M7 | Day 2 结构化输出、Day 3 参数校验 |
| M9 | logging;配置与密钥(.env、pydantic-settings、tomllib) |
2 | 4h | M6 | 可观测性、密钥管理 |
| M10 | 正则表达式 | 2 | 4h | Day 1 | 解析模型输出、清洗文本 |
| M11 | 文件与序列化进阶;SQLite | 2 | 4h | Day 2 | 记忆持久化 |
| M12 | pytest 进阶(fixture、conftest、mock、覆盖率) | 3 | 4h | Day 2 | 工具与 agent 的测试 |
| M13 | 并发模型:线程、进程、concurrent.futures、subprocess |
3 | 6h | M3 | 执行命令行工具、CPU 密集任务 |
| M14 | asyncio:Task/TaskGroup/超时/取消/限流/队列/异步生成器 |
3 | 10h | M1, M3 | Day 3 并发调用多个模型;SSE |
| M15 | httpx:同步/异步/流式、超时、错误、重试(tenacity)、mock 测试 | 3 | 6h | M14 | 所有 API 调用的底座 |
| M16 | 性能与观测基础:perf_counter、cProfile、tracemalloc |
3 | 3h | M13 | 找出慢在哪 |
| M17 | HTTP/REST/JSON Schema 基础;FastAPI(参数、Pydantic、依赖注入、路由拆分、lifespan、SSE、测试) | 4 | 16h | M8, M14, M15 | Week 4 FastAPI + SSE 接口 |
| M18 | 架构与封装:分层、Protocol 接口、依赖注入、错误边界、领域模型 vs 传输模型、Python 里真正常用的模式 |
4 | 8h | M4, M17 | agent 的可测试架构 |
| M19 | 安全基础;在 Linux 服务器上运行(SSH、uv、uvicorn、tmux);Docker 知道存在 | 4 | 4h | M17 | 部署到 H20 服务器 |
| M20 | 综合项目 Notebook Service | 4–收官 | 50h | 全部 | StudyBuddy 的骨架 |
三档标注沿用 Day 1–3 的定义(A 必须掌握 / B 了解会用 / C 知道存在),每个模块内部的分档见对应周计划。
4. 学习方法(沿用,微调)¶
- 50+10 PRIMM 块、8 分钟自检后再问 AI、AI 七条规则(
ai-guide.md)全部沿用。进阶阶段新增一条:读源码——每周挑一个标准库模块(contextlib、functools、dataclasses、logging)读 100 行,这是从"会用"到"懂"的捷径。 - 工作日晚上的结构:18:00–18:10 打开昨天的日志,决定今晚 3 块做什么 → 块 1 复习 + 昨日练习收尾 → 块 2 新知识 → 块 3 练习 → 21:10–21:40 小项目推进 → 21:40–22:00 日志 + 明日预览。不在工作日晚上开新的大块(asyncio、FastAPI 的第一天都排在周末/假期)。
- 每天一次
git commit(第 2 周起):提交信息用简版 Conventional Commits(feat: ...、fix: ...、docs: ...、test: ...)。 - 周测:闭卷 20 题(10 道预测输出、5 道找 bug、5 道写函数),40 分钟;错题进下周一的回忆清单。
- 睡眠:晚自习结束 22:00,23:00 前睡。学习科学的结论没有变。
5. 每周的"完成标准"¶
| 周 | 最低完成标准(没做到就不开下一周的新模块,用周日补) |
|---|---|
| 1 | exercises/week1 全部 [OK];文本处理管线能跑;能默写:生成器函数、带 wraps 的装饰器、@contextmanager、__repr__/__eq__/__hash__、Protocol |
| 2 | 知识库 CLI 能 uv run kb add/list/search;ruff check 与类型检查零错误;pytest --cov ≥80%;已推送到 cnb.cool;能默写:Pydantic 模型 + field_validator、logging.getLogger(__name__) 配置、re.finditer 命名分组 |
| 3 | 聚合器线程池版比顺序快 ≥5 倍、asyncio 版 ≥2 倍且有重试;能默写:TaskGroup + asyncio.timeout、httpx.AsyncClient 复用、pytest fixture + monkeypatch |
| 4 | FastAPI 服务有 ≥6 个端点、SSE 端点、TestClient 测试;能画出分层图并说明每层的职责 |
| 收官 | Notebook Service 验收清单全勾;结业测验 ≥80%;三档复评完成 |
6. 与 learn-agent 并行时的最低配置¶
如果 Python 线只能拿到一半时间(约 75 小时有效),按下面顺序做,砍掉其余:
- 必做(≈45h):M2 装饰器 +
inspect(6h)→ M4 数据模型与Protocol(6h)→ M7 typing(4h)→ M8 Pydantic(8h) → M9 logging + 配置(3h)→ M14 asyncio(8h) → M15 httpx(4h) → M12 pytest 进阶(3h)→ M6 结构与 Git(3h)。 - 次优先(≈20h):M1 生成器(4h)→ M3 上下文管理器(2h)→ M11 文件 + SQLite(3h)→ M10 正则(2h)→ M17 FastAPI 精简版(9h:参数/Pydantic/依赖注入/SSE/测试)。
- 只读不练(≈10h):M5、M13、M16、M18、M19 各读核心结论 + 跑一遍示例。
- 综合项目:不做 Notebook Service,把 StudyBuddy 当作综合项目,但用本仓库
plan/capstone.md的验收清单去检查它的 Python 质量(分层、测试、日志、类型)。
对应关系:learn-agent Day 2(类型/Pydantic/JSON)→ 先做 M7 + M8;Day 3(装饰器/inspect/async/httpx)→ 先做 M2 + M14 + M15;Week 2 记忆(SQLite)→ M11;Week 4 FastAPI + SSE → M17。
7. 综合项目速览:Notebook Service¶
一个"个人知识库"HTTP 服务 + 命令行客户端,只用本仓库学到的 Python 知识,不含任何 LLM 调用:
- FastAPI:
/notes增删改查、/notes/search?q=(正则/关键词)、/import(从 Markdown 目录批量导入,后台任务)、/events(SSE 推送导入进度)、/health。 - Pydantic:请求/响应模型、
pydantic-settings读配置与密钥、JSON Schema 自动出现在/docs。 - 仓储层:
Protocol定义NoteRepository,SqliteNoteRepository实现 +InMemoryNoteRepository供测试。 - httpx:异步客户端从一个公开 API 拉取数据(带超时与 tenacity 重试),演示"服务调外部服务"。
- logging:控制台 rich + 文件 JSON 轮转;每个请求一条结构化日志。
- typer CLI:
nb add/list/search/import,通过 httpx 调自己的服务。 - 测试:单元(仓储、服务)+ API(
TestClient)+ 异步(httpx mock);pytest --cov≥80%。 - 工程:src 布局、
uv build可安装、ruff与类型检查零错误、README、Git 历史干净、推送 cnb.cool;可选:在 H20 服务器上用uv run uvicorn跑起来并用ssh -L在本机访问。
详细规格、里程碑与验收清单见 plan/capstone.md(周 4 结束前给出)。
8. 文件导航¶
| 文件 | 内容 |
|---|---|
plan/month-overview.md |
本文 |
plan/week1.md … plan/week4.md |
每周逐日计划:知识点分档、阅读、预测代码、练习规格、小项目、周测 |
plan/capstone.md |
Notebook Service 规格与验收 |
exercises/week1/ … week4/ |
练习骨架 + pytest 测试 + 周测 quiz_weekN.md;exercises/solutions/weekN/ 参考答案与周测答案 |
exercises/final/ |
结业测验(笔答 + 限时编码);答案与参考实现在 exercises/solutions/final/ |
projects/kb/、projects/aggregator/ |
第 2、3 周小项目(uv workspace 成员):骨架 + 完整测试 + README 验收;参考答案在 exercises/solutions/week2/kb_solution、week3/aggregator_solution |
projects/notebook/ |
综合项目,10/2 起自己从 uv init --package 开始搭(记得把它加进根 pyproject.toml 的 dependencies 与 [tool.uv.sources]) |
research/07 … 13 |
本路线依据的 7 份调研报告(2026-09-05 核实) |
checklist.md 第五–七部分 |
每周打卡、进阶 A 档自评表、结业复盘 |
tools/ |
维护脚本:verify_solutions.py 验证全部答案;kb_skeleton.py / aggregator_skeleton.py 在骨架与答案之间切换 |