functools.partialのドキュメントは、それが「ほぼ同等」であると述べています私はちょうど示された行を変更する必要がありますように。実装functools.partialは
このコードをコピーするだけで心配する必要があるその他の機能/問題点はありますか?
functools.partialのドキュメントは、それが「ほぼ同等」であると述べています私はちょうど示された行を変更する必要がありますように。実装functools.partialは
このコードをコピーするだけで心配する必要があるその他の機能/問題点はありますか?
_functoolsmodule.c
のソースコードを見ると、心配する必要はありません。
partial
のモジュール実装は、酸洗とrepr
を扱うが、それはそう、おそらくそれはCで実装されている理由は、単に効率のためにあるドキュメントのように働くように他のすべてが見えます。関数クロージャではなく型であるという事実もあります。
ただし、ドキュメントの例では、func
,args
およびkeywords
は純粋に化粧品です。それらは実際のfunctools.partial
インスタンスであるためオーバーライドできません。一つの選択肢は、functools.partial
をサブクラス化するために、次のようになります。
class rpartial(partial):
def __call__(self, *args, **kwargs):
kw = self.keywords.copy()
kw.update(kwargs)
return self.func(*(args + self.args), **kwargs)
一つの落とし穴は、あなたの部分的な割り当ては、次の例のように任意の引数を扱うだろうかです:
def f(a,b, *args):
pass
さて、部分的に、引数1と2にf
を適用します。
g = partial(f, 1, 2)
は何ですかパラメータb
の値はg
になりますか? 1ですか、それともまだ値を待っていますか?その点については、a
の値は何ですか?別の言い方をすれば、もしあれば、与えられた議論のどれだけが追加議論として扱われるべきか。
これは良いコメントですが、私は)( 'グラムを意味するsynataxを宣言したい== F(1,2); g(x)== f(x、1,2); g(x、y)== f(x、y、1,2)などである。これは奇妙なことがありますが、体系的です。 – Dave
組み込み関数をサブクラス化することは考えていませんでした。 クラスrpartial(部分): – Dave
これは素晴らしいですが、私はそれが読むべきだと思うデフ__call __(自己、* argsを、** kwargsから): キロワット= self.keywords.copy() kw.update(kwargsから) return self.func(*(args + self.args)、** kw) – ishmael
@ishmaelありがとうございました。 – ecatmur