ホームページ >バックエンド開発 >Python チュートリアル >Python で関数デコレーターを作成してチェーンする方法
関数デコレータを作成してそれらをチェーンする方法
はじめに
Python のデコレータでは次のことが可能です関数自体を変更せずに、関数の動作を変更できます。デコレータを使用すると、機能の追加、入出力の確認、関数の呼び出しの前後でその他の操作を実行できます。
デコレータの作成
デコレータを作成するには、別の関数を引数として取る関数を定義します。この関数は、元の関数をラップする新しい関数を返す必要があります。
def make_bold(fn): # The new function the decorator returns def wrapper(): # Insertion of some code before and after return "<b>" + fn() + "</b>" return wrapper
デコレータのチェーン
デコレータをチェーンして、関数に複数の変更を適用できます。以下に示すように、各デコレータを順番に適用するだけです。
@make_bold @make_italic def say(): return "hello"
このコードは、make_bold デコレータを make_italic デコレータに適用し、次に、say 関数に適用します。その結果、say 関数は太字と斜体の両方の文字列を返します。
例: デコレータをチェーンしてテキストをフォーマットする
テキストの文字列。テキストに太字と斜体の書式設定を追加したいとします。上記で定義したデコレータを使用して、これを実現できます。
@make_bold @make_italic def formatted_text(text): return text print(formatted_text("Hello world"))
出力:
<b><i>Hello world</i></b>
デコレータに引数を渡す
引数を で囲むことにより、デコレータに引数を渡すことができます。括弧:
def a_decorator_passing_arguments(function_to_decorate): def a_wrapper_accepting_arguments(arg1, arg2): print("I got args! Look: {0}, {1}".format(arg1, arg2)) function_to_decorate(arg1, arg2) return a_wrapper_accepting_arguments @a_decorator_passing_arguments def print_full_name(first_name, last_name): print("My name is {0} {1}".format(first_name, last_name)) print_full_name("Peter", "Venkman")
出力:
I got args! Look: Peter, Venkman My name is Peter Venkman
結論
デコレータの作成方法と連鎖方法を理解することで、 Python 関数の機能を拡張できます。この強力な手法を使用すると、動作を変更し、チェックを実行し、モジュール式で再利用可能な方法でコードを拡張できます。
以上がPython で関数デコレーターを作成してチェーンする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。