任意のpython関数をデコレートする方法を探していますので、元の代わりに関数を呼び出し、すべてのパラメータをリストまたはdictとして渡します。渡されたすべてのパラメータをサポートしている間にPython関数を置き換える方法
def replace_func(f, replacement_f):
def new_f(*args, **kwargs):
replacement_f(args, kwargs)
return new_f
しかし、私はnew_f
内replacement_f
を参照することはできません。
はより正確には、このような何か(fは任意の関数であり、replacement_fリストや辞書を取ります)。そして、私はにnew_f
を渡す標準的なトリックを、異なるパラメータのデフォルトとして使用することはできません。これは、*args
と**kwargs
の可変引数リストを使用しているためです。
元の関数が呼び出された場所は変更できず、定位置と名前付きの両方のパラメータを受け入れます。
私はそれがあまり明確ではないことを恐れていますが、必要であれば明確にすることができます。
おかげ
あなたが正しいです:これは明らかではありません。私は元の関数の呼び出しを変更する必要はなく、むしろその定義を変更すると思います。それを変更できない場合は、おそらくそれを飾ることはできません。おかげですべて – hop
。私はこれを非常に困難にしていましたが、私は* args、** kwargsの面倒なことがなくても関数を置き換えることができます。 また、Python 1.xからスコープルールが変更されたと思います。今では、内部関数定義内の外部関数から変数を参照できます。 – Mzzzzzz