Python 学习路线 MOC
从零基础到可独立交付 Python 脚本、服务与数据/AI 应用的系统学习路线:七个阶段、依赖关系、逐篇目录与 0 到 1 完成标准。
[!info] related notes
Python 学习路线 MOC
这个概念为什么出现
没有依赖顺序的笔记库会制造假进度:会写 print 却不懂可变共享,会调 FastAPI/LangChain 却不会管理异常与资源,会写 async def 却在事件循环里塞阻塞调用。本路线把「从零到可交付脚本与服务」拆成七个阶段,作为学习与复习的主路径。
[!abstract] 路线结论 先建立“对象、名字与可变性”的心智,再学习“序列/映射与面向对象协议”,随后进入异常、上下文与迭代器;并发必须连同 GIL、线程/进程与 asyncio 的边界一起学,最后用工具链、类型标注与工程化能力完成真实程序,需要时再下沉到 CPython 实现。
学 Python 最怕把“语法会写”和“对象模型真正建立起来”混为一谈。整条路线围绕五个问题展开:
- 名字绑定、对象身份与可变共享分别解决什么问题
- 为什么“一切皆对象”,协议(dunder)如何替代名义接口
- 为什么异常是主错误路径,上下文管理器如何管资源
- 为什么 asyncio 解决 I/O 并发而不是 CPU 并行,GIL 边界在哪
- 为什么虚拟环境、打包与类型标注是现代 Python 工程体验的一部分
如何使用这份路线
| 场景 | 做法 |
|---|---|
| 从零开始 | 按阶段编号顺序读;每篇先跑最小示例,再看规则与边界 |
| 已有 JS/Java/Go 经验 | 可加速语法,但不要跳过可变性、迭代器、异常与 asyncio |
| 只抓主干 | 看文末「8 个主干主题」和「0 到 1 完成标准」 |
| 查某一主题 | 先定位阶段表中的文件名,再打开对应笔记;细节在原子笔记,不在本页展开 |
| 主攻 AI 应用 | 语言主线至少到阶段三 + 阶段四 asyncio;再进 Python 大模型应用开发 |
难度标记
- L1 入门 · L2 基础巩固 · L3 核心心智 · L4 工程/并发 · L5 运行时与进阶
- 源码:否 / 建议 / 需要 —— 是否值得对照官方文档、CPython 或标准库源码加深
依赖关系总图
flowchart TD
S1["阶段一 基本认知"] --> S2["阶段二 数据与对象模型"]
S2 --> S3["阶段三 错误、资源与协议"]
S3 --> S4["阶段四 并发与异步"]
S3 --> S5["阶段五 工程化开发"]
S4 --> S5
S5 --> S6["阶段六 运行时与进阶"]
S5 --> S7["阶段七 真实项目能力"]
S4 --> S7
S6 --> S7
箭头表示认知依赖,不表示前一阶段必须全部背完。每个阶段都应运行最小例子并观察结果。
阶段与子 MOC 对照
| 阶段 | 目标 | 主要子 MOC |
|---|---|---|
| 一 | 建立 Python 默认思维方式与程序骨架 | Python 语言基础 MOC · Python 工具链与工程结构 MOC |
| 二 | 理解容器、可变性、类与对象协议 | Python 语言基础 MOC · Python 类型系统与面向对象 MOC · Python 类与面向对象 MOC |
| 三 | 异常、上下文管理器、迭代器与生成器 | Python 类型系统与面向对象 MOC · Python 标准库与应用 MOC |
| 四 | 线程/进程/GIL 与 asyncio 生命周期 | Python 并发与异步 MOC |
| 五 | 环境、打包、测试、类型标注与项目结构 | Python 工具链与工程结构 MOC · Python 测试与质量 MOC · Python 服务工程化 MOC |
| 六 | 执行模型、导入、GC、GIL 与性能方法 | Python 运行时与进阶 MOC |
| 七 | CLI、HTTP、数据访问、AI 应用与交付 | Python 标准库与应用 MOC · Python Web 与后端 MOC · Python 数据访问 MOC · Python 服务工程化 MOC |
阶段一:建立 Python 的基本认知
目标:能解释 Python 解决什么问题;能安装并运行程序;理解模块入口、名字绑定、基础类型、控制流与函数的基本规则。
完成标准:
- 能从零写出脚本并用
python/python -m验证 - 能说明名字绑定、可变对象共享与
is/==的边界 - 能读懂函数参数、返回值与基础装饰器形态
| 序号 | 笔记 | 核心问题 | 难度 | 源码 |
|---|---|---|---|---|
| 1.1 | Python 的设计哲学与工程气质 | Python 为什么这样设计 | L2 | 建议 |
| 1.2 | 安装 Python 并运行第一个程序 | 如何安装并跑通第一个程序 | L1 | 否 |
| 1.3 | Python 程序结构 | 模块、语句、if __name__ 与导入 | L1 | 否 |
| 1.4 | Python 的名字、赋值与作用域入门 | 名字如何绑定到对象 | L2 | 否 |
| 1.5 | Python 数据类型与数据结构 | 内置类型地图如何展开 | L2 | 否 |
| 1.6 | Python 基本类型 | int/float/bool/None/str 如何表示值 | L1 | 否 |
| 1.7 | Python 运算符与表达式 | 运算符、短路与真值 | L1 | 否 |
| 1.8 | Python 流程控制 | if/for/while/match 如何组织控制流 | L1 | 否 |
| 1.9 | Python 函数与装饰器 | 参数、闭包与装饰器 | L2 | 否 |
| 1.10 | Python 环境配置 | 本地环境如何稳定可用 | L1 | 否 |
阶段二:理解 Python 的数据与对象模型
目标:建立 list/tuple/dict/set/str/bytes 的准确模型;分清可变共享与不可变;理解类、属性查找、继承与鸭子类型。
完成标准:
- 能解释列表共享引用导致的“改 A 影响 B”
- 能说明实例属性与类属性的查找顺序
- 能用特殊方法让对象接入
len/in/上下文协议的入口直觉
| 序号 | 笔记 | 核心问题 | 难度 | 源码 |
|---|---|---|---|---|
| 2.1 | Python 列表与元组 | 可变序列与不可变序列差在哪 | L2 | 否 |
| 2.2 | Python 字典 (dict) | 键约束、查找与插入顺序 | L2 | 建议 |
| 2.3 | Python 集合 | 去重、成员测试与不可变集合 | L2 | 否 |
| 2.4 | Python 字符串与字节 | str/bytes、编码与不可变性 | L2 | 否 |
| 2.5 | Python 可变性、身份与拷贝 | is/==、浅拷贝与深拷贝 | L3 | 建议 |
| 2.6 | Python 推导式与生成器表达式 | 声明式构造容器的边界 | L2 | 否 |
| 2.7 | Python 类与面向对象 | class 如何组织状态与行为 | L2 | 否 |
| 2.8 | Python 类属性与实例属性 | 状态放在哪里、查找顺序 | L3 | 建议 |
| 2.9 | Python 实例方法、类方法与静态方法 | 三种方法绑定差在哪 | L3 | 否 |
| 2.10 | Python 继承、重写与 super | 复用与协作调用如何发生 | L3 | 否 |
| 2.11 | Python 多重继承与 MRO | 多父类如何决定查找顺序 | L4 | 建议 |
| 2.12 | Python 特殊方法 | dunder 如何接入语言协议 | L3 | 建议 |
| 2.13 | 鸭子类型 | 为何“像鸭子”即可协作 | L3 | 否 |
| 2.14 | Python None 与真值判定 | 空值与假值如何区分 | L2 | 否 |
阶段三:错误、资源与协议
目标:把异常当作可组合控制流;掌握上下文管理器;用迭代器/生成器表达惰性序列;理解 typing 注解与运行时的边界。
完成标准:
- 能设计合理的异常层次与
raise ... from - 能实现并正确使用
with/ 异步上下文 - 能区分可迭代对象、迭代器与生成器
- 能说明类型注解默认不强制运行时检查
| 序号 | 笔记 | 核心问题 | 难度 | 源码 |
|---|---|---|---|---|
| 3.1 | Python 错误处理 | 异常如何成为主错误路径 | L3 | 否 |
| 3.2 | Python 异常层次与异常链 | 何时自定义异常、如何保留因果 | L3 | 否 |
| 3.3 | Python 上下文管理器 | with 如何配对获取与释放 | L3 | 建议 |
| 3.4 | Python 迭代器与生成器 | 惰性序列与协议如何工作 | L3 | 建议 |
| 3.5 | Python 类型标注入门 | 注解解决什么、不解决什么 | L3 | 否 |
| 3.6 | Python dataclass 与命名元组 | 数据载体如何减少样板 | L2 | 否 |
| 3.7 | Python Protocol 与结构化类型 | 静态鸭子类型如何表达 | L4 | 否 |
阶段四:并发与异步
目标:先分清并行与并发、CPU 与 I/O;再学线程/进程与 asyncio 事件循环;掌握取消、超时与阻塞调用的边界。
完成标准:
- 能解释 GIL 对 CPU 密集与 I/O 密集的不同影响
- 能用
asyncio并发多个 I/O 任务并正确取消 - 知道何时用线程、进程池或
asyncio.to_thread
| 序号 | 笔记 | 核心问题 | 难度 | 源码 |
|---|---|---|---|---|
| 4.1 | Python 并发模型总览 | 线程/进程/异步各自解决什么 | L3 | 否 |
| 4.2 | Python GIL 与线程 | GIL 限制什么、不限制什么 | L4 | 建议 |
| 4.3 | Python 多进程与进程池 | CPU 密集如何绕过 GIL | L3 | 否 |
| 4.4 | Python 异步编程 | async/await 与事件循环 | L3 | 建议 |
| 4.5 | asyncio 任务、超时与取消 | 结构化并发直觉如何落地 | L4 | 建议 |
| 4.6 | Python 同步原语与队列 | 锁、事件与跨任务通信 | L3 | 否 |
阶段五:工程化开发
目标:掌握虚拟环境与依赖锁定、包布局、测试、静态检查、日志与配置。
完成标准:
- 能用现代工具(如 uv/venv)创建可复现环境
- 能写 pytest 风格测试并组织项目包
- 能配置格式化/静态检查,并说明类型检查的位置
| 序号 | 笔记 | 核心问题 | 难度 | 源码 |
|---|---|---|---|---|
| 5.1 | Python 包管理演进 | pip/venv/poetry/uv 关系 | L2 | 否 |
| 5.2 | virtualenv · uv · poetry | 环境与依赖工具如何选型 | L2 | 否 |
| 5.3 | Python 模块、包与导入 | 包布局与导入规则 | L3 | 建议 |
| 5.4 | Python 项目结构与打包 | src 布局、pyproject 与分发 | L3 | 否 |
| 5.5 | Python 用 pytest 做测试 | 夹具、参数化与可维护测试 | L3 | 否 |
| 5.6 | Python 静态检查与 Ruff | lint/format 如何进入工作流 | L2 | 否 |
| 5.7 | Python 日志 | logging 层次与结构化日志 | L2 | 否 |
| 5.8 | Python 配置管理 | 环境变量、配置文件与密钥边界 | L2 | 否 |
| 5.9 | [[ruff|Ruff]] · Pylance | 工具对象入口 | L1 | 否 |
阶段六:运行时与进阶
目标:理解 CPython 执行与对象表示的边界;导入系统、GC、描述符与性能方法论。不把实现细节写成语言永久承诺。
完成标准:
- 能区分“语言语义”与“CPython 当前实现”
- 能解释引用计数 + 分代 GC 的直觉模型
- 能对热点做测量后再谈优化
| 序号 | 笔记 | 核心问题 | 难度 | 源码 |
|---|---|---|---|---|
| 6.1 | Python 执行模型概览 | 源码如何变成字节码并执行 | L4 | 建议 |
| 6.2 | Python 对象模型与内存 | PyObject 与引用计数直觉 | L4 | 需要 |
| 6.3 | Python 垃圾回收 | 循环引用如何被处理 | L4 | 建议 |
| 6.4 | Python 导入系统 | finders/loaders 与缓存 | L4 | 建议 |
| 6.5 | Python 描述符与属性访问 | 属性查找的完整链路 | L5 | 需要 |
| 6.6 | Python 元类概览 | 何时才需要元类 | L5 | 建议 |
| 6.7 | Python 性能方法论 | 测量、算法、本地扩展边界 | L4 | 否 |
| 6.8 | C 扩展与 FFI 概览 | 何时下沉到原生代码 | L4 | 否 |
阶段七:真实项目能力
目标:用标准库与主流生态交付 CLI、HTTP 服务、数据访问与 AI 应用;理解框架位置,不替代语言主线。
完成标准:
- 能独立完成 CLI 与一个可测试的 HTTP API
- 能处理 JSON、配置、日志与基本错误模型
- 能把 AI/Agent 应用挂在清晰的服务边界上(可选方向)
| 序号 | 笔记 | 核心问题 | 难度 | 源码 |
|---|---|---|---|---|
| 7.1 | 使用 argparse 构建 CLI | 如何做可测试命令行工具 | L3 | 否 |
| 7.2 | 使用标准库/星lette 思维构建 HTTP 服务 | 请求生命周期如何组织 | L3 | 否 |
| 7.3 | Python JSON 与序列化 | 编解码边界与自定义类型 | L2 | 否 |
| 7.4 | Python 路径与文件 IO | 现代文件路径 API | L2 | 否 |
| 7.5 | Python HTTP 客户端 | requests/httpx 选型 | L2 | 否 |
| 7.6 | FastAPI | 何时用框架而不是裸 HTTP | L3 | 否 |
| 7.7 | Python 数据访问与 SQLAlchemy | ORM/SQL 边界 | L4 | 否 |
| 7.8 | Python 认证与 JWT | 认证如何接入 HTTP 边界 | L3 | 否 |
| 7.9 | Python 服务优雅关闭 | 信号、任务排空与依赖关闭 | L4 | 否 |
| 7.10 | Python 可观测性 | 日志、指标与追踪入口 | L4 | 否 |
| 7.11 | Python Docker 部署 | 镜像、依赖与多阶段构建 | L3 | 否 |
| 7.12 | Python 大模型应用开发 | AI 应用主题入口 | L3 | 否 |
| 7.13 | Python 调用 AI 接口 | 同步 HTTP 调用模型服务 | L2 | 否 |
| 7.14 | Python RAG Agent | 检索增强应用骨架 | L3 | 否 |
| 7.15 | Python Tool Calling Agent | 工具调用闭环 | L3 | 否 |
| 7.16 | Python Agent API 服务 | 把 Agent 暴露为服务 | L3 | 否 |
| 7.17 | DailyUse 初始化 Python 应用 | 仓库内实战脚手架 | L2 | 否 |
[!tip] 目录状态 本路线表中的语言主线与工程主线原子笔记已按依赖齐套;应用层 AI 专题与部分工具对象页沿用仓库既有笔记。细节深度可继续迭代。
如果只抓主干,优先这 8 个主题
- Python 的名字、赋值与作用域入门
- Python 可变性、身份与拷贝(或阶段二先吃透 list/dict)
- Python 函数与装饰器
- Python 类属性与实例属性
- Python 特殊方法 / 鸭子类型
- Python 错误处理
- Python 迭代器与生成器
- Python 异步编程
一条实用学习原则
不要把 Python 学成“背第三方库 API”。先把 名字与对象、可变性、协议、异常、异步边界 五条主线学稳,再进入打包、Web、数据库和 AI 应用。
0 到 1 的完成标准
- 能解释为什么“变量赋值”更像名字绑定而不是箱子装值
- 能说明可变默认参数与共享列表的危险
- 能用异常表达业务失败,并用
with管理资源 - 能实现一个简单迭代器/生成器,并说明耗尽语义
- 能解释 asyncio 不适合什么工作负载
- 能在可复现虚拟环境中安装依赖并跑测试
- 能完成一个小型 CLI 或 HTTP API 的可验证闭环
- 能区分“语言语义”和“CPython 实现细节”
认知跳跃提醒(按路线可规避)
- 未理解可变共享就学类与继承 → 先 1.4 / 2.5
- 未理解异常与上下文就上 asyncio 取消 → 先 3.1 / 3.3
- 未理解 GIL 与阻塞就堆
async def→ 先 4.1 / 4.2 / 4.4 - 未测量就谈“Python 慢/换语言” → 先 5.5 / 6.7
相关入口
- 总地图:Python MOC
- 对象定位:Python
- 设计哲学:Python 的设计哲学与工程气质
- 安装验收:安装 Python 并运行第一个程序 · Python 环境配置
- OOP 专题:Python 类与面向对象 MOC
- AI 应用:Python 大模型应用开发
自测题
- 为什么并发阶段要放在异常与上下文管理器之后?
- 阶段六运行时笔记与阶段二对象模型应如何配合阅读?
- 若时间有限,优先抓哪 8 个主干主题?
答案
- 取消、超时与资源释放是并发正确性的前置;不会
with/异常链时,异步取消只会更乱。 - 先掌握语言层对象、属性与协议语义,再读 CPython 表示与 GC;实现细节不回写为规范。
- 名字绑定、可变性、函数/装饰器、类属性、特殊方法/鸭子类型、错误处理、迭代器/生成器、异步编程。
BodySense 项目实战入口(把 Python 基础落到真实代码)
[!info] BodySense 的 AI 服务用 Python + FastAPI + LangChain 实现。下面的代码是你把「类型注解 / 协议 / 可变性 / 异步 / 迭代器」知识落到实处的样本。阅读顺序:先读代码注释 → 翻对应笔记 → 回看代码。
| 想练的知识点 | 去看的代码(仓库内相对路径) | 对应笔记 |
|---|---|---|
Pydantic 模型、运行时校验、default_factory | apps/ai-service/src/models/stream_event.py | Python 类型基础 · Python 可变性与拷贝 · TS 静态类型与运行时校验 |
| 异步生成器、流式路由、资源管理 | apps/ai-service/src/api/routes/runtime.py | Python 异步编程 · Python 迭代器与生成器 · Python 错误处理 |
- 流式链路教材(仓库内):
docs/learning/06-javascript-typescript-streaming.md - 由易到难的实战任务(仓库内):
docs/learning/05-practice-tasks.md - 跨语言对照(同一契约的 Go/TS 实现):Go 学习路线 · TypeScript 学习路线 · BodySense MOC