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 может быть полезно в этом.