Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 複数デコレータの連鎖:高度な関数修飾 | Pythonデコレータの習得
Pythonにおける関数型プログラミングの概念

book複数デコレータの連鎖:高度な関数修飾

メニューを表示するにはスワイプしてください

Pythonにおける**デコレータの連結(Chaining decorators)**は、複数のデコレータを1つの関数に適用できる強力な機能。 各デコレータは関数を何らかの方法で修正または拡張し、特定の順序で適用される。 デコレータの連結を説明する実用的な例:

2つのシンプルなデコレータ

まず、2つのシンプルなデコレータを定義:

def decorator_one(func):
    def wrapper():
        print("Decorator one start")
        func()
        print("Decorator one end")
    return wrapper

def decorator_two(func):
    def wrapper():
        print("Decorator two start")
        func()
        print("Decorator two end")
    return wrapper

デコレータの連結

これらのデコレータを1つの関数に適用:

1234567891011121314151617181920
def decorator_one(func): def wrapper(): print("Decorator one start") func() print("Decorator one end") return wrapper def decorator_two(func): def wrapper(): print("Decorator two start") func() print("Decorator two end") return wrapper @decorator_one @decorator_two def greet(): print("Hello!") greet()
copy

各デコレータには、次のデコレータに進む前と、そのデコレータの処理が完了した後に実行されるコードが含まれています。これは階層的に動作します。デコレータは上から下の順に適用されます。 上位のデコレータの出力が、次の下位デコレータへの入力となります。この階層構造により、元の関数に複数の機能を追加できます。

実行順序

greet() を呼び出すと、実行順序は次のようになります:

  1. decorator_one から最初の print が実行される;
  2. decorator_one 内で、decorator_two から最初の print が実行される;
  3. 最後に、元の greet 関数が実行される;
  4. その後、戻って decorator_two のメッセージ出力を完了する;
  5. 最後に decorator_oneprint 文が実行されて全体が終了する。

出力は次のようになります:

Decorator one start
Decorator two start
Hello!
Decorator two end
Decorator one end

デコレータの連鎖 は、関数の動作をモジュール化し、可読性を保ちながら拡張する強力な方法です。

次のチャレンジでこのトピックへの理解がさらに深まることを願っています。

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 5.  5

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 5.  5
some-alt