質問

キーワード引数の一般的な辞書を渡して、関数呼び出しのレイヤーがいくつかあります。

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)

これは、設定が必要な場合です argqwargs オーバーライドする default. 。それ以外の場合は(必要に応じて default 可能な設定をオーバーライドします argqwargs):

def func1(**qwargs):
    d = dict(qwargs, arg=default)
    func2(**d)
    func3(**qwargs)

キーワードのargument以来 dict ある場合は、位置引数の値を無効にします。

他のヒント

同じキーと値を持つ新しいDICTを作成するには、使用できます

 newdict=dict(qwargs)

Qwargsには、安いキーがたくさん含まれていない場合。

可能であれば、複数のARGの代わりに、関数を実際にDICTとして取得するように関数を書き直すことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top