AT's Blog

趣味のプログラミングに関する技術メモがメインです。

デコレータについて勉強しなおし

最近マイクロフレームワークのFlaskで遊んでいます。

Welcome to Flask — Flask Documentation (0.12)

Djangoより軽量で、私のようにちょっとWebアプリケーション開発っぽいことを趣味でやってみたい、 という人間にはぴったりだと思います。

さて、FlaskではViewとPython関数がデコレータを用いて1:1対応づけされます。

このデコレータの仕組みをよくわかっていなかったので下記サイト様を参考に復習してみました。

qiita.com

内容を要約すると、

といったところでしょうか。

デコレータを用いないサンプルコードを下記に示します。

def wrapper(func): # 関数を引数に取る高階関数
    def inner():
        return func()+1
    return inner

def foo():
    return 1

foo = wrapper(foo) # fooの再定義

同じことをデコレータ構文を用いると、下記のようなコードになります。

def wrapper(func): 
    def inner(): # 
        return func()+1
    return inner

@wrapper # デコレータ
def foo():
    return 1

わかってみると以外と単純な気もします。