1
def myfunc(a,b=2):
    print("Called with", a, b)
    return
p1 = functools.partial(myfunc, b=4)
p1("foobar", 4)

最後の行を実行すると構文エラーが発生するのはなぜですか? 私がすればそれは動作します:myfunc("foobar", 4)

4

3 に答える 3

4

'partial' は既に 'b' を 4 に設定しています。別の値が必要な場合は、パラメータ 'b' を明示的に設定する必要があります。

>>> p1("foobar")
('Called with', 'foobar', 4)

>>> p1("foobar", b=5)
('Called with', 'foobar', 5)
于 2012-04-13T13:42:11.353 に答える
0

bインfunctools.partialコールを提供しているためです。呼び出しは次のようになります。

p1("foobar")

b=4または、 inを取り除いて、次のp1 = functools.partial(myfunc, b=4)ようにすることもできます。

p1 = functools.partial(myfunc)
于 2012-04-13T13:46:39.353 に答える
0

これは、Python ではオプションのパラメーターを任意の順序で使用できるためだと思います。より静的に型付けされた言語を使用する場合、通常、関数/メソッドで定義された順序でオプションのパラメーターを使用することに制約があります。たとえば、Python ではこれは合法です。

def myfunc(a=1,b=2,c=3):
    print a,b,c

myfunc(c=99, b=13, a=12)

オプションのパラメーターは任意の順序で指定できるため、python は、どのパラメーターがどのローカル関数変数に割り当てられているかを明示的に知る必要があると思います。

于 2012-04-13T13:48:10.613 に答える