假设我有一个函数,foo
,它有一些参数…一些位置和关键字:
def foo(a, b=1.0, c=None):
print a
print c
return 2 * b
是否有另一个函数我可以调用foo
作为参数(或我可以调用的foo
方法),它将返回给我foo
的位置参数列表以及foo的关键字参数的元组列表及其默认值?具体来说,要求:
the_function_i_want(foo)
应该返回
(('a',), (('b', 1.0), ('c', None)))
或者类似的东西。要明确的是,我做不是想要一种方法来找出什么值传递给foo
一个特定的时间,它被调用。相反,我想以可编程的方式获得有关foo
函数签名的信息。
(我想到的用例是自动使一个web表单,将能够提交适当的数据作为指定函数的参数。因此,如果我以适当的方式调用web_form(foo)
,它将能够呈现一个web表单,为foo
的每个参数提供空格,并以适当的方式预先填充默认调用值。
我想你是在描述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)>