获取python函数的参数顺序?

时间:2014-01-14 12:19:59

标签: python reflection

我有以下功能:

def foo(a, b, c):
    print "Hello"

假设我知道它存在,我知道它需要三个参数a,b和c,但我不知道它的顺序。

我希望能够在给定字典的情况下调用foo:

args = { "a": 1, "b" : 17, "c": 23 }

有没有办法找出参数的传递顺序?

1 个答案:

答案 0 :(得分:9)

你不需要;让Python为你解决这个问题:

foo(**args)

这会将您的字典应用为关键字参数,这是完全合法的。使用关键字参数时,可以按任何顺序使用foo()的参数:

>>> def foo(a, b, c):
...     print a, b, c
... 
>>> foo(c=3, a=5, b=42)
5 42 3
>>> args = {'a': 1, 'b' : 17, 'c': 23}
>>> foo(**args)
1 17 23

您仍然可以使用inspect.getargspec() function

找出确切的顺序
>>> import inspect
>>> inspect.getargspec(foo)
ArgSpec(args=['a', 'b', 'c'], varargs=None, keywords=None, defaults=None)

但为什么要养一只狗并自己吠叫?