装飾機能の署名を保存する
装飾は、Python機能の機能を強化するための強力なツールです。ただし、元の関数の署名を不明瞭にすることがあります。これは、ドキュメント、デバッグ、および自動化されたツールに問題がある場合があります。 def g(*args、** kwargs): args = [int(x)for x in args] kwargs = dict((k、int(v))for k、v in kwargs.items()) furne f(*args、** kwargs) g
を返す装飾は予想どおりに機能しますが、装飾された関数の署名は「 args、*kwargs」に置き換えられ、元の引数に関する情報を失います。満足のいくもの:
署名をdocstringに手動でコピーします。モジュールはエレガントなソリューションを提供します:
def args_as_ints(f):
def g(*args, **kwargs):
args = [int(x) for x in args]
kwargs = dict((k, int(v)) for k, v in kwargs.items())
return f(*args, **kwargs)
return g
インポートデコレーター
@Decorator.Decorator
def args_as_ints(f、 *args、** kwargs):
args = [int(x)for x in args]
kwargs = dict((k、int(v))for k、v in kwargs.items())
return f(*args、** kwargs)このデコレーターは、ラップされた関数に引数として渡すことにより、元の関数の署名を保持します。 def funny_function(x、y、z = 3): "" "Computes x*y 2*z" "" x*y 2*z
return、装飾された関数funny_functionは元の署名を保持します:>>> help(funny_function) モジュール__main__の関数funny_functionのヘルプ: Funny_function(x、y、z = 3) x*y 2*z
python 3.4:
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3