12

次の方法があるとします。

def methodA(arg, **kwargs):
    pass

def methodB(arg, *args, **kwargs):
    pass

methodA では、kwargs を渡して methodB を呼び出したいと思います。ただし、methodA次のように定義すると、2 番目の引数が名前付き変数引数ではなく位置変数として渡されるようです。

def methodA(arg, **kwargs):
    methodB("argvalue", kwargs)

methodA の **kwargs が **kwargs として methodB に渡されるようにするにはどうすればよいですか?

4

3 に答える 3

34

kwargs 変数の前にアスタリスクを置きます。これにより、Python は変数 (辞書であると見なされます) をキーワード引数として渡します。

methodB("argvalue", **kwargs)
于 2008-09-09T08:50:34.143 に答える
2

余談ですが、メソッドの代わりに関数を使用する場合は、functools.partial も使用できます。

import functools

def foo(arg, **kwargs):
    ...

bar = functools.partial(foo, "argvalue")

最後の行は関数 "bar" を定義します。この関数が呼び出されると、最初の引数が "argvalue" に設定され、他のすべての関数が渡されて foo が呼び出されます。

bar(5, myarg="value")

電話します

foo("argvalue", 5, myarg="value")

残念ながら、それはメソッドでは機能しません。

于 2008-09-15T15:28:30.033 に答える
1

いくつかの実験と私はこれを見つけました:

def methodA(arg, **kwargs): methodB("argvalue", **kwargs)

今では明らかなようです...

于 2008-09-09T08:49:02.397 に答える