8

我试图找出从模块中检索到的方法的参数。我发现了一个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仅针对本地功能设计还是我做错了什么?

4

2 回答 2

14

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

这样做的原因是,除了解析(自由格式)文档字符串之外,没有办法找出该方法接受哪些参数,因为参数是以(有点)类似 getarg 的方式传递的——即不可能找出哪些参数它接受而不实际执行该功能。

于 2012-07-05T11:18:13.727 回答
3

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

在你的例子中

import math
math.sin.__doc__

"sin(x)

Return the sine of x (measured in radians)"

不幸的是,有几种不同的标准在运作。请参阅什么是标准 Python 文档字符串格式?

您可以检测正在使用的标准,然后以这种方式获取信息。从上面的链接看起来pyment可能有助于做到这一点。

于 2017-04-18T18:36:43.033 回答