Python 拆解Python字节码 问题
你想通过将你的代码反编译成低级的字节码来查看它底层的工作机制。
Python 拆解Python字节码 解决方案
dis
模块可以被用来输出任何Python函数的反编译结果。例如:
Python 拆解Python字节码 讨论
当你想要知道你的程序底层的运行机制的时候,dis
模块是很有用的。比如如果你想试着理解性能特征。 被 dis()
函数解析的原始字节码如下所示:
如果你想自己解释这段代码,你需要使用一些在 opcode
模块中定义的常量。例如:
奇怪的是,在 dis
模块中并没有函数让你以编程方式很容易的来处理字节码。 不过,下面的生成器函数可以将原始字节码序列转换成 opcodes
和参数。
使用方法如下:
这种方式很少有人知道,你可以利用它替换任何你想要替换的函数的原始字节码。 下面我们用一个示例来演示整个过程:
你可以像这样耍大招让解释器奔溃。但是,对于编写更高级优化和元编程工具的程序员来讲, 他们可能真的需要重写字节码。本节最后的部分演示了这个是怎样做到的。