デコレータ
Pythonにはデコレータ構文がある。
関数を他の関数で包んで、機能を追加するのが(使う分には)簡単にできる構文だ。
TurboGearsでは、テンプレートの指定や入力チェック、認証チェックなどをデコレータで行うようになっている。
詳しい説明は以下の資料で。
http://www.nasuinfo.or.jp/FreeSpace/kenji/sf/python/virtualMachine/decorator.htm
デコレータを実際に作る方法も上記資料で詳しく述べられているが、Python2.5から使えるfunctools.partialを使った方法を検討してみた。
まず、クロージャだけで実現させる例。
二重にクロージャ書くのがだるい。っていうか分かりにくい
関数をうけとって関数を返す関数を返す?
def trace(before, after): def decorate(func): def trace_func(*args, **kwargs): before() result = func(*args, **kwargs) after() return result return trace_func return decorate def before(): print "before" def after(): print "after" @trace(before, after) def hello(): print "hello"
呼び出し可能オブジェクトを使った例。
引数を受け付けるのがコンストラクタに移るので、クロージャが一段減る。
class Trace(object): def __init__(self, before, after): self.before = before self.after = after def __call__(self, func): def trace(*args, **kwargs): self.before() result = func(*args, **kwargs) self.after() return result return trace def before(): print "before" def after(): print "after" @Trace(before, after) def hello(): print "hello"
パーシャル関数を使った例
引数設定をパーシャルで固定して、ラップする関数を引数とした関数にする。
デコレータの書き方が上のやつと変わってしまうのが難点。
from functools import partial def trace(before, after, func): def trace(*args, **kwargs): before() result = func(*args, **kwargs) after() return result return trace def before(): print "before" def after(): print "after" @partial(trace, before, after) def hello(): print "hello"
もう少し検討すれば、paritalの恩恵を受けつつ通常と同じ書き方ができそうな気がするのだが。
その他
う、両方とも詐欺師だ。
- 作者: 棚橋なもしろ,小金丸大和,貴矢高康事務所
- 出版社/メーカー: 講談社
- 発売日: 2007/07/17
- メディア: コミック
- クリック: 8回
- この商品を含むブログ (7件) を見る
- 作者: 黒丸,夏原武
- 出版社/メーカー: 小学館
- 発売日: 2007/07/05
- メディア: コミック
- 購入: 1人 クリック: 1回
- この商品を含むブログ (24件) を見る
Q.E.D. 27
鏡像
鏡像は左右逆に見えるけど上下逆に見えないのはなぜ?
見える(思える)だけってことだね。
立証責任
ラストの燈馬がかっこよすぎ。
裁判員制度がちゃんと機能すれば、検察は手が抜けなくなるってーことだよね。
Q.E.D.証明終了(27) (講談社コミックス月刊マガジン)
- 作者: 加藤元浩
- 出版社/メーカー: 講談社
- 発売日: 2007/07/17
- メディア: コミック
- クリック: 13回
- この商品を含むブログ (53件) を見る
0.3 release
http://cheeseshop.python.org/pypi/flexable/0.3dev
TurboGearsのテンプレートや、Buffet, wsgiview で使われるopen template plugin systemに対応しました。
OCamlを勉強しようと思う
Concurrent Cleanを勉強しようと思っていたのだが、単純にMacPortsに入っていなかったので却下。:-p
個人的な観点
型推論とモジュールシステムに酔ってみようと思う。
- 作者: OCaml-Nagoya
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2007/05/22
- メディア: 単行本(ソフトカバー)
- クリック: 59回
- この商品を含むブログ (31件) を見る
赤い夢の迷宮
初読み。
ジュブナイルじゃないので、勇嶺名義だそうで、っていうか描写が...
仕掛けというか舞台装置はいいんですけど、実行犯の最後があっけなさすぎない?
- 作者: 勇嶺薫
- 出版社/メーカー: 講談社
- 発売日: 2007/05/10
- メディア: 新書
- クリック: 10回
- この商品を含むブログ (46件) を見る
Launchpad O/Rマッパー
Ubuntuの開発拠点Launchpadで使われているというO/Rマッパー Strom が公開された。
https://storm.canonical.com/ ここに直接アクセスすると"フロントページ"にリダイレクトされてしまい、MoinMoinの初期ページなのはなぜなんだぜ?
と思っていた。
ふと気がつき、FrontPageにアクセスしてみたら、こっちが正解。
https://storm.canonical.com/FrontPage
i18nの罠だなこれは。
ちらーっとTutorialを斜め読みした感じでは、アクティブレコード型なのかな。
この系統だとSQLObjectが有名どころ。
あと、SQLAlchemy上のElixirあたりか。
データアクセスをとにかくpythonicにかけるSQLObjectと比べて、普通のSQLクエリも使っちゃうところはいいのかわるいのか....