Если это для исследования, чтобы увидеть, что происходит, я бы рекомендовал посмотреть IPython . Это добавляет различные ярлыки для получения объектов документации, свойств и даже исходного кода. Например, добавив "?" функция выдаст справку для объекта (по сути, это ярлык для «help (obj)», при использовании двух? («func??
») будет отображаться исходный код, если он доступен.
Существует также множество дополнительных удобств, таких как завершение табуляции, удобная печать результатов, история результатов и т. Д., Которые делают его очень удобным для такого рода исследовательского программирования.
Для более программного использования интроспекции будут полезны базовые встроенные функции, такие как dir()
, vars()
, getattr
и т. Д., Но стоит потратить время на ознакомление с модулем inspect . Чтобы получить источник функции, используйте «inspect.getsource
», например, применив ее к себе:
>>> print inspect.getsource(inspect.getsource)
def getsource(object):
"""Return the text of the source code for an object.
The argument may be a module, class, method, function, traceback, frame,
or code object. The source code is returned as a single string. An
IOError is raised if the source code cannot be retrieved."""
lines, lnum = getsourcelines(object)
return string.join(lines, '')
inspect.getargspec
также часто полезен, если вы имеете дело с обертыванием или манипулированием функциями, поскольку он даст имена и значения по умолчанию параметров функции.