def myfunc(a,b=2):
print("Called with", a, b)
return
p1 = functools.partial(myfunc, b=4)
p1("foobar", 4)
最後の行を実行すると構文エラーが発生するのはなぜですか? 私がすればそれは動作します:myfunc("foobar", 4)
def myfunc(a,b=2):
print("Called with", a, b)
return
p1 = functools.partial(myfunc, b=4)
p1("foobar", 4)
最後の行を実行すると構文エラーが発生するのはなぜですか? 私がすればそれは動作します:myfunc("foobar", 4)
'partial' は既に 'b' を 4 に設定しています。別の値が必要な場合は、パラメータ 'b' を明示的に設定する必要があります。
>>> p1("foobar")
('Called with', 'foobar', 4)
>>> p1("foobar", b=5)
('Called with', 'foobar', 5)
b
インfunctools.partial
コールを提供しているためです。呼び出しは次のようになります。
p1("foobar")
b=4
または、 inを取り除いて、次のp1 = functools.partial(myfunc, b=4)
ようにすることもできます。
p1 = functools.partial(myfunc)
これは、Python ではオプションのパラメーターを任意の順序で使用できるためだと思います。より静的に型付けされた言語を使用する場合、通常、関数/メソッドで定義された順序でオプションのパラメーターを使用することに制約があります。たとえば、Python ではこれは合法です。
def myfunc(a=1,b=2,c=3):
print a,b,c
myfunc(c=99, b=13, a=12)
オプションのパラメーターは任意の順序で指定できるため、python は、どのパラメーターがどのローカル関数変数に割り当てられているかを明示的に知る必要があると思います。