首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 的 yield 到底暂停了什么?拆开 generator 的栈帧,看 192 字节怎么装下整个现场

Python 的 yield 到底暂停了什么?拆开 generator 的栈帧,看 192 字节怎么装下整个现场

作者头像
小小张说故事
发布于 2026-10-20 08:30:07
发布于 2026-10-20 08:30:07
140
举报
概述
yield 不是函数返回,而是带着现场离开:局部变量、执行位置、待收值全部封存在 192 字节的 generator 对象加 184 字节栈帧里,恢复只要 179.6 纳秒。实测 10 万个斐波那契数生成器峰值仅 36 KB,list 版本要 445 MB;100 万次迭代生成器 142.8 ms 反而比 list 快 8 ms。6 组实验拆开发电机的内部结构。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 1. 先看字节码:yield 前后是两套世界
  • 2. 暂停之后,局部变量还活着
  • 3. 这份现场的体积:192 + 184 字节
  • 4. 恢复一次多少钱?179.6 纳秒
  • 5. 速度反常识:生成器比 list 还快一点
  • 6. 内存差距:36 KB 对 445 MB
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档