foo.py
for i in range(10 ** 8):
i
py_testing.py
import foo
import dis
print(dis.dis(foo))
当我执行py_testing.py时,输出如下:
None
如何获取foo.py
的反汇编字节码?
答案 0 :(得分:0)
模块对象不存储为初始化模块而执行的字节码的任何记录。最好的选择是打开模块的.py
文件,然后将内容传递到dis.dis
:
with open(foo.__file__) as f:
dis.dis(f.read())
这假定该模块具有一个.py
文件。
如果导入模块很昂贵或有其他问题,可以使用importlib.util.find_spec
查找模块的文件而无需导入:
import importlib.util
filepath = importlib.util.find_spec('foo').origin
with open(filepath) as f:
dis.dis(f.read())
考虑到foo.py
中的1亿次迭代循环,我不想导入它。