Python備忘録(1) デコレータ

初めはPythonのデコーレータについて。

 

1. 関数を返り値にした時の挙動

例えば以下のようなとき

“`

def foo()

      def bar(a, b)

          return a + b

      return bar

“`

このとき、

“`

>a = foo()

>a(1, 2)

 

3

“`

という値が返る。

a=foo()

の時点で、aの中身は関数barそのものとなっている。

従ってaは引数を取ることが出来、上記のような値が返る。

 

2. デコレータについて

デコレータとは、

“`

@wrapper

def function()…

“`

のように、@をおいて定義されるラッパーのようなものである。

例えば

“`

def foo(func):

      def bar(a, b):

          return func(a + b)

      return bar

“`

であったときに、

“`

@foo

def sq(x):

 

     return x^2

“`

とおくと、内部的には

“`

sq = foo(sq)

“`

と同値である。

気持ちとしては、デコレータはまさに定義する関数のラッパーのようなもので、

その出力などを変更したり、判定を追加したりしたいときに使う。

ちなみにこのとき、sqは

“`

>sq(5,1)

36

“`

と出力される。