我有以下功能:
def foo(a, b, c):
print "Hello"
假设我知道它存在,我知道它需要三个参数a,b和c,但我不知道它的顺序。
我希望能够在给定字典的情况下调用foo:
args = { "a": 1, "b" : 17, "c": 23 }
有没有办法找出参数的传递顺序?
答案 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)
但为什么要养一只狗并自己吠叫?