Pythonデコレータ入門
メニューを表示するにはスワイプしてください
デコレーターについて説明します。
decorators は初心者にとって難しいトピックとなる場合があります。デコレーターがどのように機能するかを、段階的に詳しく解説します。最初は理解が難しいかもしれません。これらの課題に取り組む準備はできていますか?そのためにここに来たのです!
Decorators は、クロージャを利用して、他の関数に追加の機能を付与する 関数 です。以下はデコレーターの動作例です:
123456789101112131415161718192021def decorator(func): def wrapper(argument1, argument2): print("Function starts executing") result = func(argument1, argument2) print("Function ends executing") return result return wrapper def add(a, b): print(f"Function add: {a} + {b}") return a + b add = decorator(add) print(add(14, 12)) print(add(11, 28)) print(add(33, 16))
この例では、decorator() 関数は別の関数を引数として受け取り、wrapper() 関数を定義し、与えられた関数を wrapper() 内に閉じ込め、wrapper() を返します。デコレータの動作には3つのステップがあります:
- 関数を引数として受け取る。
- その関数を新たに定義した関数(ラッパー)内に閉じ込める。
- 元の関数を内包したラッパー関数を返す。
wrapper() 関数はデコレータの主なロジックを含み、与えられたパラメータで関数を呼び出します。add() 関数は wrapper() によって返された decorator() 関数によって再代入され、これにより add() 関数が内包されます。
- Pythonインタプリタは最初にデコレータ関数を読み込み、定義します。この時点ではデコレータ内のコードは実行されず、単に関数名が記録されるだけです。
- 次に、
add = decorator(add)関数を定義します。decoratorと同様、この関数もまだ実行されず、定義されるだけです。 - addの定義後、次の行
wrapperが実行されます。ここでデコレータ関数が呼び出され、add関数が引数として渡されます。add内でaddが定義され、その後返されます。これにより、wrapperは元の関数ではなく、返されたdecoratorを参照するようになります。 add(14, 12)が実行されると、wrapper関数が呼び出されます。
- wrapper は「Function starts executing」を出力します。
- 元の add 関数を呼び出し、「Function add: 14 + 12」を出力し、26を返します。
- 「Function ends executing」を出力します。
- wrapper は26を返し、print(add(14, 12)) によって出力されます。
次の呼び出しも同様の手順を繰り返します。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 5. 章 1
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 5. 章 1