35

だから私は理解しようとしています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'

キーワード引数として使用するとTypeError消えます:y

の:

g2( y=1 )

4

何が原因TypeErrorですか?

4

3 に答える 3

42

これは、実際には何の関係もありませfunctools.partialん。基本的に、次のように関数を呼び出しています。

f(1, x=3)

Python は最初に位置引数を満たし、最初の引数はx. 次に、キーワード引数が適用され、再びx.

functools.partial()代わりに、最初の位置引数をキーワード引数として既に指定したことを検出する手段はありません。位置引数をy=キーワード引数に置き換えて呼び出しを拡張することはありません。

位置引数とキーワード引数を混在させる場合は、同じ引数を 2 回使用しないように注意する必要があります。

于 2014-07-15T10:11:39.593 に答える