Python inspect.getargspec со встроенной функцией
Я пытаюсь выяснить аргументы метода, извлеченного из модуля.
Я нашел модуль inspect
с удобной функцией getargspec
.
Он работает для функции, которую я определяю, но не буду работать для функций из импортированного модуля.
import math, inspect
def foobar(a,b=11): pass
inspect.getargspec(foobar) # this works
inspect.getargspec(math.sin) # this doesn't
Я получаю сообщение об ошибке:
File "C:\...\Python 2.5\Lib\inspect.py", line 743, in getargspec
raise TypeError('arg is not a Python function')
TypeError: arg is not a Python function
Является inspect.getargspec
, предназначенным только для локальных функций, или я делаю что-то неправильно?
Ответы
Ответ 1
Невозможно получить такую информацию для функции, которая реализована в C вместо Python.
Причиной этого является то, что нет способа узнать, какие аргументы принимает метод, кроме как путем разбора (свободной формы) docstring, поскольку аргументы передаются (несколько) getarg-подобным образом - т.е. невозможно найти какие аргументы он принимает без фактического выполнения функции.
Ответ 2
Вы можете получить строку doc для таких функций/методов, которые почти всегда содержат тот же тип информации, что и getargspec. (Имена I.e. param, нет параметров, необязательные, значения по умолчанию).
В вашем примере
import math
math.sin.__doc__
дает
"sin(x)
Return the sine of x (measured in radians)"
К сожалению, в работе действуют несколько разных стандартов. См. Каков стандартный формат docstring Python?
Вы можете определить, какой из стандартов используется, а затем захватить информацию таким образом. Из приведенной выше ссылки это выглядит как pyment может быть полезно в этом.