2014-01-14 135 views
2

我有以下功能:獲取python函數的參數順序?

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

比方說,我知道它的存在,我知道這需要命名爲A,B和C三個參數,但我不知道在哪個順序。

我希望能夠調用foo給像一本字典:

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

有沒有辦法找出其中責令參數是要傳遞?

回答

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) 

但是,爲什麼有一隻狗和樹皮自己呢?