2014-07-19 76 views
0

下面的代碼是不正確的:Python函數參數傳遞序列

def add(a, b, c): 
    return a + b + c 
args = (2, 3) 

add(a = 1, *args) 
TypeError: add() got multiple values for keyword argument 'a' 

我見過一些例子​​,但我仍然不知道爲什麼有一個錯誤,有誰能夠詳細解釋一下?

+2

我注意到搜索[「有多個值的關鍵字參數」](http://stackoverflow.com/search?q=%22got+multiple+values+for+keyword+argument%22)產量很大的命中。這些問題是否適合你的情況? –

回答

4

當應用參數時,Python 第一個填充位置參數,然後關鍵字參數。

在您的具體情況下,*args然後應用第一,所以第一個位置參數傳遞2,第二個傳遞3。第一個參數是a這裏。

然後a = 1被應用,Python發現你已經爲它應用了一個值。

換句話說,當你使用一個作爲關鍵字參數時,Python不能也不會不考慮位置參數。僅僅因爲您使用a作爲關鍵字參數不會使其不適合作爲位置參數。