メインコンテンツへスキップ
  1. 補講 応用 Python プログラム/

デコレータ

デコレータ
目次

デコレータ
#

教科書 p.193(Lesson 7.5)

Python のデコレータとは,関数やメソッドを修飾するための機能です. デコレータは,関数を受け取り,関数を返すような関数です.

def decorator_function(f):
    def wrapper():
        print("Before function call")
        f()
        print("After function call")
    return wrapper

@decorator_function
def hello():
    print("Hello, World!")

上記のような decorator_function がデコレータと呼ばれる関数です. @decorator_function は,hello 関数を decorator_function で修飾しています. この場合,上記の下から2行目のhello 関数の呼び出しは,decorator_function(hello) のような呼び出しに置き換えられます. そして,decorator_function 内部で,引数に受け取った f という関数を呼び出しています. そのため,実行結果は,以下のようになります.

Before function call
Hello, World!
After function call

デコレータは,関数を修飾するための機能であるため,関数の前後に何か処理を追加することができます. 例えば,関数の実行時間を計測するデコレータを作成することができます.

def timer(f):
    import time
    def wrapper(*args, **kwargs):   # 呼び出し元の関数がどのような引数であっても受け取れるようにする.
        start = time.time()
        result = f(*args, **kwargs)
        end = time.time()
        print(f"{f.__name__} took {end - start} seconds")
        return result
    return wrapper

このように少し高度な Python プログラムを作成するときには,デコレータは強力なツールとなります. 以下のようなサイトで解説されていますので,参考にしてください.