2014-07-15 65 views
18

所以我想了解partialsfunctools.partial想要使用一個位置參數作爲關鍵字參數

import functools 

def f(x,y) : 
    print x+y 

g0 = functools.partial(f, 3) 
g0(1) 

4 # Works as expected 

在:

g1 = functools.partial(f, y=3) 
g1(1) 

4 # Works as expected 

在:

g2 = functools.partial(f, x=3) 
g2(1) 

TypeError: f() got multiple values for keyword argument 'x' 

的如果我使用y作爲關鍵字參數TypeError消失:

在:

g2(y=1) 

4 

是什麼原因導致TypeError

回答

26

這與functools.partial無關,的確如此。你基本上調用你的函數是這樣的:

f(1, x=3) 

Python的第一個滿足的位置參數,和你的第一個參數是x。然後應用關鍵字參數,然後再次提供x

functools.partial()無法檢測到您已將第一個位置參數提供爲關鍵字參數。它不會通過用y=關鍵字參數替換位置參數來增加您的調用。

混合位置參數和關鍵字參數時,必須注意不要使用同一個參數兩次。

相關問題