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

Retrieve the names of (and default values of) the arguments accepted by a specified function

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

def foo(a, b=1.0, c=None):
    print a
    print c
    return 2 * b

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

the_function_i_want(foo)

应该return

(('a',), (('b', 1.0), ('c', None)))

或者类似的东西。需要明确的是,我 想要一种方法来确定在调用它的特定时间传递给 foo 的值。相反,我想要以编程方式了解有关 foo 的函数签名的信息。

(我想到的用例是自动制作一个 Web 表单,该表单能够提交适当的数据作为指定函数的参数。因此,如果我在以适当的方式,它将能够为 foo 的每个参数呈现一个带有空格的 Web 表单,并以适当的方式预先填充默认调用值。)

我认为你在描述 inspect.getargspec:

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

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

>>> from inspect import signature
>>> signature(foo)
<Signature (a, b=1.0, c=None)>