Python Glossary English

все Python 3inspectфункция

inspect.getsource()

исходный код

Возвращает исходный текст модуля, класса, функции или метода одной строкой — читая файл, из которого объект загружен.

Синтаксис

inspect.getsource(object) -> str

Исходник берётся из файла в момент вызова, поэтому в REPL, в exec() и для функций на C его нет: OSError «could not get source code» или TypeError для встроенных. Для декорированной функции getsource идёт по __wrapped__ и показывает исходную функцию вместе со строкой декоратора, а не код обёртки. Лямбда возвращается всей строкой, в которой записана, а файл, изменённый после импорта, покажет новый текст, а не исполняемый. Внутри getsource работают недокументированные помощники findsource, getblock и BlockFinder; полагаться на них нельзя.

Примеры

import functools, inspect
def logged(fn):
    @functools.wraps(fn)
    def wrapper(*args):
        return fn(*args)
    return wrapper
@logged
def total(xs):
    return sum(xs)
print(inspect.getsource(total), end='')  # → @logged / def total(xs): / return sum(xs)
import inspect
ns = {}
exec('def z():\n    return 1\n', ns)
try:
    inspect.getsource(ns['z'])
except OSError as e:
    print(e)  # → could not get source code
try:
    inspect.getsource(len)
except TypeError as e:
    print(type(e).__name__)  # → TypeError

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности