質問
キーワード引数の一般的な辞書を渡して、関数呼び出しのレイヤーがいくつかあります。
def func1(**qwargs):
func2(**qwargs)
func3(**qwargs)
後続の関数呼び出しのいくつかで、いくつかのデフォルトの引数を提供したいと思います。
def func1(**qwargs):
func2(arg = qwargs.get("arg", default), **qwargs)
func3(**qwargs)
このアプローチの問題は、argがqwargs内にある場合、「キーワード引数の複数の値を取得する」というタイプエラーが提起されていることです。
qwargs ["arg"]をデフォルトに設定したくありません。なぜなら、Func3は令状なしでこの引数を取得するからです。 qwargsのコピーを作成し、コピーに「arg」を設定することができますが、qwargsは大きなデータ構造を持っている可能性があり、コピーしたくありません(copy.copyはcopy.deepcopyだけではありません。 ?)。
ここでやるべきことは何ですか?
解決
電話をかける目的で別のdictを構築して使用するだけです func2
, 、後の電話のためにオリジナルを放っておきます func3
:
def func1(**qwargs):
d = dict(arg=default)
d.update(qwqargs)
func2(**d)
func3(**qwargs)
これは、設定が必要な場合です arg
の qwargs
オーバーライドする default
. 。それ以外の場合は(必要に応じて default
可能な設定をオーバーライドします arg
の qwargs
):
def func1(**qwargs):
d = dict(qwargs, arg=default)
func2(**d)
func3(**qwargs)
キーワードのargument以来 dict
ある場合は、位置引数の値を無効にします。
他のヒント
同じキーと値を持つ新しいDICTを作成するには、使用できます
newdict=dict(qwargs)
Qwargsには、安いキーがたくさん含まれていない場合。
可能であれば、複数のARGの代わりに、関数を実際にDICTとして取得するように関数を書き直すことができます。
所属していません StackOverflow