检索指定函数接受的参数的名称(以及默认值)

8on*_*ne6 2 python reflection function

假设我有一个函数,foo它有一些参数......一些位置和一些关键字:

def foo(a, b=1.0, c=None):
    print a
    print c
    return 2 * b
Run Code Online (Sandbox Code Playgroud)

是否有另一个我可以foo作为参数调用的函数(或者foo我可以调用的方法)将返回给我一个位置参数的foo列表以及foo的关键字参数的元组列表及其默认值值?具体来说,致电:

the_function_i_want(foo)
Run Code Online (Sandbox Code Playgroud)

应该回来

(('a',), (('b', 1.0), ('c', None)))
Run Code Online (Sandbox Code Playgroud)

或类似的东西.需要明确的是我不是想办法弄清楚哪些值传递给foo一个特定的时间,它被调用.相反,我想foo以程序方式获得有关函数签名的信息.

(我想到的用例是自动创建一个Web表单,它将能够提交适当的数据作为指定函数的参数.因此,如果我web_form(foo)以适当的方式调用,它将能够呈现一个带有空格的web表单,其中每个参数都foo以适当的方式预填充默认调用值.)

jon*_*rpe 6

我想你在描述inspect.getargspec:

>>> from inspect import getargspec
>>> getargspec(foo)
ArgSpec(args=['a', 'b', 'c'], varargs=None, keywords=None, defaults=(1.0, None))
Run Code Online (Sandbox Code Playgroud)

您也可以signature在3.x中使用:

>>> from inspect import signature
>>> signature(foo)
<Signature (a, b=1.0, c=None)>
Run Code Online (Sandbox Code Playgroud)