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 サイトの他の関連記事を参照してください。