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

时间:2015-09-30 21:24:25

标签: python function reflection

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

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

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

foo

应该返回

the_function_i_want(foo)

或类似的东西。要明确我 not 想要一种方法来确定在调用它的特定时间传递给(('a',), (('b', 1.0), ('c', None))) 的值。相反,我想以编程的方式获得有关foo的函数签名的信息。

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

1 个答案:

答案 0 :(得分:6)

我认为你在描述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)>