Как преобразовать объект функции / класса / модуля Python в объект кода Python - PullRequest
3 голосов
/ 06 июля 2011

Я искал способ конвертировать функцию, класс или объект модуля в 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 Ответ

3 голосов
/ 06 июля 2011

Для функции вы можете использовать атрибут 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...