Python でデコレータ関数を使用する方法

PHPz
リリース: 2023-10-19 09:10:48
オリジナル
1240 人が閲覧しました

Python でデコレータ関数を使用する方法

Python でデコレータ関数を使用する方法

Python プログラミングにおいて、デコレータ (デコレータ) は非常に便利なツールです。これにより、元の関数コードを変更せずに追加機能で関数を拡張できます。デコレーター関数は、ログ記録、タイミング、権限の検証など、関数の実行の前後に一部の操作を自動的に実行できます。この記事では、デコレーター関数の基本概念を紹介し、いくつかの具体的なコード例を示します。

1. デコレータ関数の定義

デコレータ関数は、関数をパラメータとして受け取り、新しい関数を返す関数です。 @ 構文を使用して関数に適用できます。以下は、単純なデコレータ関数定義の例です:

def decorator_function(original_function):
    def wrapper_function(*args, **kwargs):
        # 在函数执行前的操作
        print("Before executing the function")
        # 执行原始函数
        result = original_function(*args, **kwargs)
        # 在函数执行后的操作
        print("After executing the function")
        return result
    return wrapper_function
ログイン後にコピー

2. デコレータ関数のアプリケーション

デコレータ関数は、関数の実行の前後にいくつかの追加の操作を実行できます。以下は、デコレータ関数を使用してタイミング関数を実装する例です。

import time

def timer_decorator(original_function):
    def wrapper_function(*args, **kwargs):
        start_time = time.time()
        result = original_function(*args, **kwargs)
        end_time = time.time()
        execution_time = end_time - start_time
        print(f"Execution time: {execution_time} seconds")
        return result
    return wrapper_function

@timer_decorator
def my_function():
    time.sleep(1)
    print("Function executed")

my_function()
ログイン後にコピー

上の例では、timer_decorator デコレータ関数が my_function 関数に適用されます。 my_function が呼び出されると、デコレーターは関数が実行される前に開始時刻を記録し、関数が実行された後に終了時刻を計算し、関数の実行時間を計算します。

3. デコレータ関数のパラメータ

デコレータ関数は、さまざまなデコレータをさまざまな関数に適用するためのパラメータを受け入れることができます。以下は、パラメータを含むデコレータ関数の例です。

def prefix_decorator(prefix):
    def decorator_function(original_function):
        def wrapper_function(*args, **kwargs):
            print(f"{prefix}: Before executing the function")
            result = original_function(*args, **kwargs)
            print(f"{prefix}: After executing the function")
            return result
        return wrapper_function
    return decorator_function

@prefix_decorator("LOG")
def my_function():
    print("Function executed")

my_function()
ログイン後にコピー

上の例では、prefix_decorator 関数は、関数の実行前後にプレフィックスを含むログ情報を出力するデコレータ関数を返します。

4. 複数のデコレータの適用

複数のデコレータ関数を同じ関数に適用して、デコレータの積み重ね効果を形成できます。複数のデコレータを適用する例を次に示します。

def decorator1(original_function):
    def wrapper_function(*args, **kwargs):
        print("Decorator 1: Before executing the function")
        result = original_function(*args, **kwargs)
        print("Decorator 1: After executing the function")
        return result
    return wrapper_function

def decorator2(original_function):
    def wrapper_function(*args, **kwargs):
        print("Decorator 2: Before executing the function")
        result = original_function(*args, **kwargs)
        print("Decorator 2: After executing the function")
        return result
    return wrapper_function

@decorator1
@decorator2
def my_function():
    print("Function executed")

my_function()
ログイン後にコピー

上記の例では、decorator1 およびdecorator2 デコレータ関数が my_function 関数に順番に適用されます。 my_function が呼び出されると、デコレータ 1 の後にデコレータ 2 が実行されます。

概要:

デコレータ関数は、元の関数コードを変更せずに追加関数で関数を拡張できる、Python の非常に便利なツールです。この記事では、いくつかの具体的なコード例を提供することで、読者がデコレーター関数の基本概念とその使用方法を理解できるようにしたいと考えています。デコレータ関数を使用すると、コードの重複が減り、コードがよりモジュール化され、保守が容易になります。

以上がPython でデコレータ関数を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!