KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

Python 生成器与 yield 详解 — keel 龙骨

把 yield 真正讲透:暂停/恢复的执行模型逐行演算、send/throw/close 与 yield from、异步生成器,最后对到生产级流式系统的三个真实场景(事件泵、SSE 心跳循环、协作式取消消费端),附十个经典陷阱与自检。

把 yield 真正讲透:暂停/恢复的执行模型逐行演算、send/throw/close 与 yield from、异步生成器,最后对到生产级流式系统的三个真实场景(事件泵、SSE 心跳循环、协作式取消消费端),附十个经典陷阱与自检。

章节目录

  1. 00 · return 不够用吗?yield 到底解决什么问题 — 在学语法之前,先搞清楚它为什么存在。语法十分钟就能背下来,但不理解问题,语法永远是死知识。
  2. 01 · 生成器基础:函数的「暂停键」,逐行演算 — 本章是全课地基。目标只有一个:你能在脑子里逐行演出一段生成器代码的执行轨迹。请打开 REPL,边读边敲。
  3. 02 · 双向通道:send / throw / close 与 yield from — 01 章的生成器是「单行道」:函数往外吐值,调用方只会要。这一章把另外三个方向补齐——往里塞值、往里扔异常、要求关闭——然后学 yield from 这个委托语法。这些不是炫技语法,asyncio 的地基(03 章)就建在 send 之上。
  4. 03 · 异步生成器:`async def` + `yield` — 01 章的生成器解决「惰性生产」,02 章的 send/throw 解决「双向通信」——但它们有个共同限制:函数体里不能 await。模型调用要 await、Redis 读要 await、这些 IO 等待期间函数体必须让出控制权。把 yield 放进 async def,两者就合一了。生产级流式链路里的每一个生成器,都是异步生成器。
  5. 04 · 三个真实场景生成器拆解 — 前三章的语言知识,现在对到生产代码上。三个例子来自同一类真实系统——一个流式服务:模型逐 token 产出、中间层逐事件落库、SSE 逐帧推给浏览器。每个例子先给「它解决什么问题」,再逐行拆。示例都是通用可运行的结构,不绑定任何具体项目。
  6. 05 · 陷阱清单与自检 — 十个真实高频的坑,每个都给「现象 → 原因 → 正确姿势」。前五个是所有生成器通用的,后五个是异步版特有的。

进入 keel 阅读