ホームページ >バックエンド開発 >Python チュートリアル >Python のデコレーターとコンテキスト マネージャーの原則と使用シナリオは何ですか?
Python のデコレーターとコンテキスト マネージャーは、コードをより適切に整理および管理し、コードの再利用性を向上させるのに役立つ 2 つの非常に便利な機能です。この記事では、デコレータとコンテキスト マネージャの原則と使用シナリオをそれぞれ紹介し、具体的なコード例を示します。
1. デコレーターの原理と使用シナリオ
以下は、関数の実行時間を記録するための具体的なデコレータの例です:
import time def record_time(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"{func.__name__} 执行时间为:{end_time - start_time}秒") return result return wrapper @record_time def calculate_sum(n): result = 0 for i in range(1, n+1): result += i return result print(calculate_sum(1000000))
上記のコードでは、デコレータ関数 record_time
,これは関数をパラメータとして受け取り、ラッパー関数 wrapper
を返します。ラッパー関数では、time.time()
を通じて関数の開始時刻と終了時刻を記録し、時間差を計算し、最後に実行時間を出力します。 @record_time
デコレータを使用すると、時間を計算する必要がある関数に実行時間統計を簡単に追加できます。
2. コンテキスト マネージャーの原則と使用シナリオ
__enter__
と ## を実装します。 #__exit__ メソッドは、コンテキストに入るときとコンテキストから出るときに、対応するコードを実行します。コンテキスト マネージャーは、リソースの正しい適用と解放を保証し、コード内で例外が発生したかどうかに関係なく、それらを正しく処理できます。 Python の
with ステートメントを使用すると、コンテキスト マネージャーを簡単に使用できます。
class FileManager: def __init__(self, filename, mode): self.filename = filename self.mode = mode def __enter__(self): self.file = open(self.filename, self.mode) return self.file def __exit__(self, exc_type, exc_value, traceback): self.file.close() with FileManager('example.txt','w') as f: f.write('Hello, world!')上記のコードでは、
FileManager クラスを定義します。これは
__enter__ メソッドと
__exit__ メソッド。
__enter__ メソッドはファイルを開いてファイル オブジェクトを返すために使用され、
__exit__ メソッドはファイルを閉じるために使用されます。
with ステートメントを使用すると、手動で
close メソッドを呼び出す必要がなく、コード ブロックの終了後にファイルを自動的に閉じることができます。
デコレーターとコンテキスト マネージャーは、Python で一般的に使用される 2 つのテクノロジであり、追加の機能を追加し、関数の実行前後にリソースを管理するために使用されます。デコレーターはロギング、パフォーマンス分析、権限制御などのシナリオに適しており、コンテキスト マネージャーはリソースの自動適用と解放、エラー処理などのシナリオに適しています。デコレータとコンテキスト マネージャを適切に使用することで、コードの読みやすさ、保守性、再利用性を向上させることができます。
以上がPython のデコレーターとコンテキスト マネージャーの原則と使用シナリオは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。