我一直在寻找将python中的函数或类或模块对象转换为python代码对象的方法。
有些人通过执行inspect.getsource()
和compile()
来实现此目的,但问题在于您正在阅读可能已更改的文件,或者如果它是在交互式python shell中编写的,您将只需在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()
创建它...
答案 0 :(得分:3)
对于某个功能,您可以使用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)