Pythonのデコレータ

作成した関数を書き換えずに、その関数の働きに変更を加えたい時、デコレータを用いることができる。 デコレータとは、入力として関数(変更を加えたい関数)を取り、出力として別の関数(変更を加える関数)を取る関数のことである。


具体例
引数として取ったふたつの数の和を返す関数add()があったとする。

def add(a,b):
    return a+b

>>> add(3,4)
7

この関数を、中身を書き換えずに、"引数として取った二つの数の和の自乗"を返すようにしたい(つまり3と4を入れると72の49を返すようにする)。
ここで、デコレータを用いる。

デコレータは、引数として取った関数に対して処理を行う別の関数を定義し、その別の関数を返す。

def square(func):
    def new_func(*args,**kargs):
        result = func(*args,**kargs)
        return result ** 2
    return new_func

作成したデコレータで関数を修飾するには、修飾したい関数の定義の直前に@<デコレータ名>とすればよい

@square
def add(a,b):
    return a+b

>>> add(3,4)
49