Python字节码是CPython虚拟机可执行的中间指令,用文本反汇编后是“类似汇编”的指令序列
在 Python 中,字节码(bytecode) 是 Python 源代码被编译后生成的中间表示形式,由 Python 虚拟机(CPython 的 PVM)执行。虽然字节码本身是二进制格式(存储在 .pyc 文件中),但我们可以通过标准库 dis 模块将其反汇编为人类可读的文本形式。
下面是一个完整的 Python 字节码文本示例:
✅ 示例:查看函数的字节码
import dis
def add(a, b):
return a + b
# 反汇编函数 add 的字节码
dis.dis(add)
🔽 输出结果(Python 3.10+ 示例):
2 0 LOAD_FAST 0 (a)
2 LOAD_FAST 1 (b)
4 BINARY_ADD
6 RETURN_VALUE
🔍 字节码说明:
| 列 | 含义 |
|---|---|
2 |
源代码行号(对应 return a + b 所在行) |
0, 2, 4, 6 |
字节码指令的偏移地址(以字节为单位) |
LOAD_FAST |
将局部变量(如参数 a, b)压入栈 |
BINARY_ADD |
弹出栈顶两个值,相加后将结果压回栈 |
RETURN_VALUE |
弹出栈顶值并返回 |
这就是 CPython 虚拟机实际执行的“指令”。
🧪 更复杂示例:带常量和函数调用
import dis
def greet(name):
msg = "Hello, " + name
print(msg)
dis.dis(greet)
输出(简化版):
2 0 LOAD_CONST 1 ('Hello, ')
2 LOAD_FAST 0 (name)
4 BINARY_ADD
6 STORE_FAST 1 (msg)
3 8 LOAD_GLOBAL 0 (print)
10 LOAD_FAST 1 (msg)
12 CALL_FUNCTION 1
14 POP_TOP
16 LOAD_CONST 0 (None)
18 RETURN_VALUE
LOAD_CONST:加载常量(如字符串'Hello, ')STORE_FAST:将栈顶值存入局部变量msgLOAD_GLOBAL:加载全局名字(如print函数)CALL_FUNCTION 1:调用函数,参数个数为 1POP_TOP:丢弃print的返回值(因为没用到)- 最后返回
None(Python 函数默认返回None)
💡 补充知识
- 字节码文件保存在
__pycache__目录下(如add.cpython-311.pyc)。 - 使用
compile()可手动编译源码为 code 对象:code = compile('x = 1 + 2', '<string>', 'exec') dis.dis(code) - 字节码是平台无关的,但Python 版本相关(不同版本指令可能不同)。
✅ 总结
Python 字节码的文本表示不是原始二进制,而是通过 dis 模块生成的助记符形式,便于开发者理解程序底层执行逻辑、优化性能或学习 Python 内部机制。
如果你想看真正的二进制字节码,可以读取
.pyc文件,但通常开发中只需关注dis的文本输出即可。

浙公网安备 33010602011771号