Pythonでは関数は第一級オブジェクトとして扱われるので、関数を引数にとったり、返り値として返すことができます。 つまり、ここではfugaという関数をつくり、そのfugaを関数を引数にとるhogeに渡して、hogeから返ってきた関数をfugaに割り当てているわけです。 すべてのデコレータはこのような糖衣構文であると理解して問題ないと思います。 基本のデコレータをつくる 上の説明をもとに基本的なデコレータをつくってみます。 def decorator(function): # 関数を引数にとる def retfunc(*args): # うけとった関数を使いながらいろんな処理をする関数をつくる print("デコレートされたよ") return function(*args) # デコレートされる関数 return retfunc # つくった関数を返す @decorator def fu