如何将python函数/类/模块对象转换为python代码对象

时间:2011-07-06 12:45:25

标签: python function object compilation

我一直在寻找将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()创建它...

1 个答案:

答案 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)