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

3 投票
1 回答
2528 浏览
提问于 2025-04-16 20:56

我一直在寻找一种方法,可以把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)

撰写回答