Python inspect.getargspec具有内置函数

Python inspect.getargspec with built-in function

我正试图找出从模块中检索到的方法的参数。我发现了一个具有便捷功能的inspect模块,getargspec。它适用于我定义的函数,但不适用于导入模块中的函数。

1
2
3
4
import math, inspect
def foobar(a,b=11): pass
inspect.getargspec(foobar)  # this works
inspect.getargspec(math.sin) # this doesn't

我会得到这样的错误:

1
2
3
   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是只为本地功能设计的还是我做错了什么?


对于用C而不是python实现的函数,不可能获得这种信息。

原因是,除了解析(自由格式)docstring之外,没有办法找出方法接受的参数,因为参数是以(某种程度上)getarg的方式传递的,也就是说,如果不实际执行函数,就不可能找出它接受的参数。


您可以获取此类函数/方法的文档字符串,这些函数/方法几乎总是包含与getargspec相同的信息类型。(即参数名称、参数编号、可选参数、默认值)。

在你的例子中

1
2
import math
math.sin.__doc__

给予

1
2
3
"sin(x)

Return the sine of x (measured in radians)"

不幸的是,在操作中有几个不同的标准。看看标准的python docstring格式是什么?

您可以检测到正在使用哪个标准,然后以这种方式获取信息。从上面的链接来看,Pyment在这方面可能会有所帮助。