なんたらノート第三期ベータスマートフォン用の表示で見るなんたらノート第三期ベータこの広告は、90日以上更新していないブログに表示しています。Pythonのデコレータは便利です。関数の実体定義直後に、任意のフィルタをその関数に施すことができます。hoge"うん、悪くない。現実には、クロージャを意識してネストした関数を書くような実装を、ビジネスロジックを書く人(というか、書いているときの自分)に強制したくない。なると、デコレータをパラメータ化し、いちいち再実装しなくていいようにしたい。ありがちなのはこんなコード。上手く動いてるうちはいいけど、バグ調査がデコレータの内部実装に及んだとき、これはきつい。コードレビューが激しく遅くなります。関数プログラムだから難しいんじゃ?とお思いの方、__call__メソッドをオーバーライドし、OOPで書いてみてもいいですよ。めんどくさくて、私は断念しました。じっさい、TurboGearsのコントローラにくっつける例のやつには、こんなのがいっぱいあって、とてもじゃないけどデコレータの中まで追いかけきれません。いうわけで、decoratorモジュールです。http://pypi.python.org/pypi/decorator/http://www.phyast.pitt.edu/~micheles/python/documentation.htmlこれは、デコレータの実装をもっと簡潔にしようというもの。hoge"となります。前者は任意の関数をその場でデコレータ化して適用、後者はデコレータをあらかじめ作成しておく方法です。パラメータ化デコレータの場合はこれ。decorator(invoker)ネストが2重で済みました。「OOPは解るけど、関数プログラムだとクロージャに慣れてなくて自信ないんだよね」という方には、こんな方法もありました。decorator(WrapDecorator)できあがったデコレータの使い方はまったく同じです。finishhttp://www.phyast.pitt.edu/~micheles/python/documentation.htmlには、もっと面白い実用方法が掲載されていて、ためになるのでぜひ一度見てみることをお勧めします。メモ化(時間のかかる処理は一度出した答えを憶えておく)やJavaのsynchronizedメソッドをデコレータで実現する例では、こんなにコードが簡潔なまま、現実的な応用が可能なのかと感心することでしょう。(1)月別アーカイブはてなブログをはじめよう!tanakahisateruさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。