如何将Python函数/类/模块对象转换为Python代码对象
我一直在寻找一种方法,可以把Python中的函数、类或模块对象转换成Python的代码对象。
有些人通过使用 inspect.getsource()
和 compile()
来实现这个,但这样做有个问题,就是你可能在读取一个已经被修改过的文件,或者如果是在交互式的Python环境中创建的,就会在 getsource
时遇到错误。
我在想,是否还有其他人能找到解决这个问题的方法,这样就可以像下面这样:
import dis
def func(arg):
x = 5
arg = 3
return x + arg
code_obj = function_to_code_obj(func)
dis.disassemble(code_obj)
并且能够像使用 compile()
或 parser.suite()
创建的那样,打印出代码对象的反汇编结果……
1 个回答
4
对于一个函数,你可以使用 func_code
这个属性:
import dis
def func(arg):
x = 5
arg = 3
return x + arg
def function_to_code_obj(func):
return func.func_code
code_obj = function_to_code_obj(func)
dis.disassemble(code_obj)