EmptyPage.jp > Whining Express > 2008-01-14
サイトの更新情報や日々の雑感など。
明けましておめでとうございます。
テンプレート処理用の Python ライブラリ、texttemplate.py を公開。
掲示板(まだ言ってるのかよ)でこれを使おうということで作りました。はじめ、HTML を解析したツリーを使ってテンプレート処理をしようと考えていた(し、実装していた)のですが、HTML にしか使えないのがやっぱり嫌になったので、汎用のテキストテンプレートです。まだ実用に供するものかはわかりませんけど。
余談だけど、このライブラリを作っている時に思いついたコードについて。
(locals() for a, b, c in iterable)
これは Python の、ジェネレータの内包表記というやつですが、この式を思いついたおかげでテンプレートの for ブロックをまともなものにするめどが立ったのです。
内包表記は、普通最初の部分で for に続く変数を使った式を書くものですが(たとえば、(x * 2 for x in range(10))、これは 0 から 18 までの偶数を生成するジェネレータ)、ここではその変数は使ってない。それでいて for 以下の変数(上の例だと、a, b, c)に代入しているのには意味があるという、へんな式。
# test.py
from pprint import pprint
L = [(1, 2, 3),
(4, 5, 6),
(7, 8, 9)]
for x in (locals() for a, b, c in L):
pprint(x)
C:¥>python test.py
{'[outmost-iterable]': <listiterator object at 0x00B31B10>,
'a': 1,
'b': 2,
'c': 3}
{'[outmost-iterable]': <listiterator object at 0x00B31B10>,
'a': 4,
'b': 5,
'c': 6}
{'[outmost-iterable]': <listiterator object at 0x00B31B10>,
'a': 7,
'b': 8,
'c': 9}
と、こういうことなのです。夜寝る時になってベッドの中でひらめいた変態的なコード。ちなみに変態的というのはベッド云々とは関係ない。