假设我有一个函数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表单,并以适当的方式预填充默认调用值。)
答案 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)>