便利関数別の関数(bar
)のラッパー関数です(foo
)。 foo
はbar
を呼び出し、出力に対してもう2つのタスクを実行します。たとえば:foo
を検査するユーザーは、彼らが渡すことができます知っているように、私はbar
からのキーワードと引数を含むようにfoo
のコールサインを希望他の関数の引数のスーパーセットを受け入れる関数の関数呼び出しシグネチャを一貫して保持する
def bar(bar_arg, bar_kw=None):
#do some stuff
return ret
def foo(bar_arg, foo_arg, bar_kw=None, foo_kw=None):
ret = bar(bar_arg, bar_kw)
ret.some_method(foo_arg, foo_kw=foo_kw)
、しかし、私はの完全なリストを維持避けたいですbar
からのパッケージ自体が更新され、その引数リストが長いため、変更する傾向があります。 foo
は常にbar
を呼び出します。bar
が受け入れる引数とキーワードの完全なリストは、自分でリストを管理する必要があるとは思われません。
bar
のコールシグネチャに基づいてfoo
のコールシグネチャを作成する方法はありますか。さらに、foo
の入力を辞書または名前空間にキャプチャして、foo
で使用されている引数とキーワードを、bar
で使用されているものと簡単に区別できるようにする方法がありますか?
注:私は* argsと** kwargsについて知っています。ただし、関数の署名はあいまいですが、どの引数とキーワード引数が許可されているかをユーザーに通知しません。
編集:私の使用例は、この例よりもはるかに複雑であることに注意してください。呼び出される外部関数(bar
)はmatplotlib.colorbar.ColorbarBase
です。呼び出し関数(foo
)は、私自身の多くのアプリケーションで使用されるプロットクラスのクラスメソッドで、他のクラスが将来使用する可能性があります。 foo
はカラーバーを作成し、ColorbarBase
で受け付けられていない追加の引数とキーワードに基づいて、カラーバーの追加作業を行います。
デコレータを(おそらく引数として 'bar'リファレンスを取得して)持っている可能性があります。 – SuperSaiyan
私は 'ret.some_method'と' return ret'を意味すると思います。 –
@Alexありがとう、編集中。その私が – Vorticity