Python生成器字节码查看与核心元素解析
一、字节码查看方法
通过Python内置的dis模块可查看生成器字节码,直观验证其"暂停/恢复"的底层逻辑:
python
import dis
# 示例1:基础生成器
def gen_func_basic():
yield 1
yield 2
# 示例2:带自定义变量的生成器
def gen_func_with_var():
a = 1
yield a
# 查看字节码
print("=== 基础生成器字节码 ===")
dis.dis(gen_func_basic)
print("\n=== 带变量生成器字节码 ===")
dis.dis(gen_func_with_var)
二、字节码核心元素拆解
1.带变量生成器字节码输出(关键部分)
9 0 LOAD_CONST 1 (1)
2 STORE_FAST 0 (a)
10 4 LOAD_FAST 0 (a)
6 YIELD_VALUE
8 POP_TOP
10 LOAD_CONST 0 (None)
12 RETURN_VALUE
2. 核心元素定义(以带变量示例为例)
| 元素类型 | 示例值 | 说明 |
|---|---|---|
| 偏移量 | 0、2、4、6、8、10、12 | 纯数字,标记指令的位置 |
| 指令 | LOAD_CONST、STORE_FAST、YIELD_VALUE、RETURN_VALUE | 英文关键词,代表底层操作 |
| 变量/常量 | 1 (1)、0 (a)、0 (None) | 指令右侧数值/字面量,是指令操作的目标数据 |
总结
- 偏移量:纯数字(如0、2、4),仅标记指令位置;
- 指令:英文关键词(如YIELD_VALUE),是生成器"暂停/恢复"的核心操作;
- 变量/常量:指令右侧数据(如1、a、None),是指令的操作对象。