ホームページ >バックエンド開発 >Python チュートリアル >Python で関数デコレーターを作成してチェーンする方法

Python で関数デコレーターを作成してチェーンする方法

DDD
DDDオリジナル
2024-12-24 19:47:15802ブラウズ

How to Create and Chain Function Decorators in 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。