小小张说故事
Python 的 yield 到底暂停了什么?拆开 generator 的栈帧,看 192 字节怎么装下整个现场
原创
关注作者
腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
搜索
搜索
关闭
发布
小小张说故事
社区首页
>
专栏
>
Python 的 yield 到底暂停了什么?拆开 generator 的栈帧,看 192 字节怎么装下整个现场
Python 的 yield 到底暂停了什么?拆开 generator 的栈帧,看 192 字节怎么装下整个现场
小小张说故事
关注
发布于 2026-10-20 08:30:07
发布于 2026-10-20 08:30:07
14
0
举报
概述
yield 不是函数返回,而是带着现场离开:局部变量、执行位置、待收值全部封存在 192 字节的 generator 对象加 184 字节栈帧里,恢复只要 179.6 纳秒。实测 10 万个斐波那契数生成器峰值仅 36 KB,list 版本要 445 MB;100 万次迭代生成器 142.8 ms 反而比 list 快 8 ms。6 组实验拆开发电机的内部结构。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系
cloudcommunity@tencent.com
删除。
python
目录
1. 先看字节码:yield 前后是两套世界
2. 暂停之后,局部变量还活着
3. 这份现场的体积:192 + 184 字节
4. 恢复一次多少钱?179.6 纳秒
5. 速度反常识:生成器比 list 还快一点
6. 内存差距:36 KB 对 445 MB
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档