Просмотр кода функции Python

Скажем, я работаю в оболочке Python, и мне предоставляется функция f. Как я могу получить доступ к строке, содержащей ее исходный код? (Из оболочки, а не путем ручного открытия файла кода.)

Я хочу, чтобы это работало даже для лямбда-функций, определенных внутри других функций.

Ответы

Ответ 1

inspect.getsource
Похоже, что источник источника не может получить исходный код лямбда.

Ответ 2

Не обязательно то, что вы ищете, но в ipython вы можете сделать:

>>> function_name??

и вы получите источник кода функции (только если он в файле). Так что это не сработает для лямбды. Но это определенно полезно!

Ответ 3

возможно, это может помочь (может получить также лямбда, но это очень просто),

import linecache

def get_source(f):

    source = []
    first_line_num = f.func_code.co_firstlineno
    source_file = f.func_code.co_filename
    source.append(linecache.getline(source_file, first_line_num))

    source.append(linecache.getline(source_file, first_line_num + 1))
    i = 2

    # Here i just look until i don't find any indentation (simple processing).  
    while source[-1].startswith(' '):
        source.append(linecache.getline(source_file, first_line_num + i))
        i += 1

    return "\n".join(source[:-1])

Ответ 4

Функциональный объект содержит только скомпилированный байт-код, исходный текст не сохраняется. Единственный способ получить исходный код - прочитать файл script, из которого он пришел.

В lambdas нет ничего особенного: у них все еще есть свойство f.func_code.co_firstline и co_filename, которое вы можете использовать для извлечения исходного файла, если лямбда определена в файле, а не интерактивный.