все 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Сообщить о неточности