《Python高级编程》全 34 篇,是一套写给「已经会写 Python、想弄懂它为什么这样运行」的人的进阶教材:从对象模型一路下探到解释器与运行时,再回到性能与分发。
本页是《Python高级编程》的全书目录:按章节顺序列出全部 34 篇,点击标题直达正文。也可以从各节末尾的「阅读导航」按顺序通读。
全书概览
| 项目 | 内容 |
|---|---|
| 书稿 | 《Python高级编程》 |
| 篇数 | 34 篇(正文 11 章 33 节 + 目录篇) |
| 领域 | CPython 实现机制与性能工程 |
| 阅读方式 | 从目录篇 进入按顺序通读,或按章节表跳读 |
| 实测版本 | Python 3.14.6(本机标准构建,非自由线程、未启用 JIT) |
| 上级专题 | 书稿专题 |
全书目录
第 1 章 对象模型与数据模型
| 节 | 文章 | 核心内容 |
|---|---|---|
| 1.1 | 一切皆对象:类型、标识与引用 | 本节从 CPython 实现层拆开「一切皆对象」:用 id/type/sys.getsi… |
| 1.2 | 属性查找、描述符协议与 getattr | 本节用实测把 obj.attr 的查找顺序拆开:沿 type.mro 找数据描述… |
| 1.3 | 魔术方法驱动的协议设计 | 本节从协议角度讲清 dunder:用实测证明隐式调用只在类型上查找、绕过实例字典,拆开迭… |
第 2 章 元编程
| 节 | 文章 | 核心内容 |
|---|---|---|
| 2.1 | 元类与 init_subclass | 本节从 CPython 实现角度拆解 class 语句:它如何脱糖成 __build_c… |
| 2.2 | 类装饰器、set_name 与属性工厂 | 本节讲透类装饰器与 set_name 的执行时机:类装饰器在元类 _init… |
| 2.3 | 动态代码生成与 AST 变换 | 本节从字符串拼接式的代码生成升级到 AST 变换:用 compile() 的三种模式、a… |
第 3 章 字节码与解释器
| 节 | 文章 | 核心内容 |
|---|---|---|
| 3.1 | CPython 执行模型与字节码 | 深入 CPython 执行内核:栈式虚拟机的求值栈与指令编码、dis 的栈效应计算、类与… |
| 3.2 | dis / bytecode 与运行时代码改写 | 实测运行时代码改写的三条路径:直接改 co_code / co_consts 与 Cod… |
| 3.3 | 实验性 JIT 与自适应解释器 | 先实测本机 3.14.6 是否启用 JIT(sys._jit.is_available(… |
第 4 章 内存管理与 GC
| 节 | 文章 | 核心内容 |
|---|---|---|
| 4.1 | 引用计数、循环 GC 与分代回收 | 本节拆开 CPython 的引用计数与循环 GC:用 sys.getrefcount 实… |
| 4.2 | 对象布局、__slots__ 与内存占用测量 | 本节用 sys.getsizeof 逐类实测 int/str/list/dict/tup… |
| 4.3 | 内存泄漏定位 | 本节用标准库 tracemalloc 做快照对比,把一次真实泄漏定位到具体行:两次各 5… |
第 5 章 并发模型深水区
| 节 | 文章 | 核心内容 |
|---|---|---|
| 5.1 | GIL 的实现与影响边界 | 从 CPython 源码机制出发拆解 GIL:解释器循环为何必须持有全局锁、切换间隔怎样… |
| 5.2 | 自由线程构建与迁移影响 | 先如实交代本机并非自由线程构建,再从 PEP 703 的对象头改造、偏向引用计数、延迟引… |
| 5.3 | 多进程、共享内存与 IPC 选型 | 用本机实测数字拆解多进程的三笔开销:fork/spawn/forkserver 的进程启… |
第 6 章 异步运行时原理
| 节 | 文章 | 核心内容 |
|---|---|---|
| 6.1 | 事件循环的实现与调度 | 用 selectors 手写一个最小事件循环,再对照 CPython 的 BaseEve… |
| 6.2 | 任务、Future 与取消语义 | 从 CPython 源码出发讲清 Task 与 Future 的关系:Future 的三… |
| 6.3 | 结构化并发与调试 | 对比 asyncio.TaskGroup 与 anyio 4.15.1 的结构化并发,讲… |
第 7 章 导入系统与包机制内部
| 节 | 文章 | 核心内容 |
|---|---|---|
| 7.1 | 导入协议与 finder / loader | 从 CPython 实现层拆开 import:sys.meta_path 上三个默认 f… |
| 7.2 | 元路径钩子与自定义导入器 | 亲手实现 MetaPathFinder 与 Loader 拦截导入,实测 sys.pat… |
| 7.3 | 命名空间包、zip 导入与冻结模块 | 实测三类非普通目录的模块来源:PEP 420 命名空间包的 _NamespacePath… |
第 8 章 类型系统运行时边界
| 节 | 文章 | 核心内容 |
|---|---|---|
| 8.1 | 描述符协议与属性查找 | 本书 1.2 节给过查找顺序的可观测结论,本节下沉到 C 实现层:object 与 ty… |
| 8.2 | typing 的静态与运行时边界 | 把注解里的类型当运行时对象来看:list[int] 是 types.GenericAli… |
| 8.3 | 注解的求值时机(PEP 649/749) | Python 3.14 的 PEP 649/749 让注解不再在函数、类、模块定义时求值… |
第 9 章 扩展与跨语言
| 节 | 文章 | 核心内容 |
|---|---|---|
| 9.1 | ctypes 与 cffi 调用 C | 从 CPython 用 dlopen 加载符号的机制讲起,实测 ctypes 的 err… |
| 9.2 | Cython 与 NumPy 加速 | 实测 Cython 3.3.0 把 .pyx 编译成 C 的完整过程:cdef 类型声明… |
| 9.3 | PyO3 与 Rust 扩展 | 讲清 PyO3 0.29.3 用 Rust 写扩展模块的架构:声明式模块、Bound<’… |
第 10 章 性能工程
| 节 | 文章 | 核心内容 |
|---|---|---|
| 10.1 | 剖析器内部与采样原理 | 从 CPython 内部拆解三种剖析钩子:sys.settrace 的逐行回调、sys.… |
| 10.2 | 内存优化与数据结构选型 | 用本机实测把「省内存」量化到底:sys.getsizeof 与 tracemalloc … |
| 10.3 | 自适应特化与 JIT 现状 | 用 dis(adaptive=True) 实测同一函数冷启动与预热后的字节码差异(LOA… |
第 11 章 分发、运行时与生态演进
| 节 | 文章 | 核心内容 |
|---|---|---|
| 11.1 | 打包与分发机制 | 用 uv build 真打一个包,逐文件拆开 wheel 的 .dist-info、RE… |
| 11.2 | 嵌入式与自由线程运行时 | 真编译一个 C 宿主把 CPython 嵌进来,实测 Py_Initialize、PyR… |
| 11.3 | PEP 流程与版本迁移策略 | 从 PEP 的状态机讲起,用 future 与 warnings.depreca… |