私は装飾している関数を呼び出す前に他の関数を呼び出す必要があるデコレータを書いています。装飾された関数は位置指定の引数を持つことができますが、装飾子が呼び出す関数はキーワード引数のみを受け入れることができます。誰かが位置引数をキーワード引数に変換する便利な方法を持っていますか?Pythonがkwargsにargsを変換する
>>> def a(one, two=2):
... pass
>>> a.func_code.co_varnames
('one', 'two')
しかし、私は位置的に渡され、どのようなキーワードとしてあったものを伝える方法を見つけ出すことはできません。
は私が装飾された機能の変数名のリストを取得することができます知っています。
私のデコレータは次のようになります。
class mydec(object):
def __init__(self, f, *args, **kwargs):
self.f = f
def __call__(self, *args, **kwargs):
hozer(**kwargs)
self.f(*args, **kwargs)
はちょうど、kwargsからとなco_varnamesを比較し、そこには何もないkwargsからする追加、最善の結果を期待以外の方法はありますか?
は、なぜあなたは引数が何であったかを知る必要があります:あなたはた場合、私はこの例であり、名前付き引数の残りの部分とそれらを含めるようは、
**kwargs
を持って、それが1本の以上のラインを取ります位置? –私はhozer関数を呼び出すためにそれらをkwargsに変換する必要があるためです。この関数はkwargsだけを受け入れますが、最初に呼び出されたすべての引数について知る必要があります。だから、人々がデコレートされた関数を位置引数または名前付き引数で呼び出すかどうかによって、hozer関数は必要なすべてのデータを取得することもあれば取得できないこともあります。 – jkoelker