デコレータ

デコレータでちと詰まったのでメモ
n()関数を例にとると、関数の宣言(def n(i)うんたら)自体は「nっていう変数に関数オブジェクトを突っ込む」っていうイメージでいいのかな。でデコレータは戻り値をnっていう変数に突っ込んでるということかな。

# -*- coding: utf-8  -*-
def d1(f):
  def g(i):
    return f(i)*2
  return g

@d1
def n(i):
  return i*i

#デコレータによりn()関数の中身は
#d1()関数のリターンであるg()関数に書き換えられている
print 'デコレータ使用'
print n(4)

#デコレータを使わない場合は
f = d1(lambda x:x*x)
print 'デコレータ未使用'
print f(4)

追記:比較しやすいように修正 2009/7/27