フォーマット記法とlocals()

2006/12/26 自前RSSアグリゲータ - 清水川Webで書かれてた

print template % locals()

という記法は知らなかったのですが、%演算子がフォーマット記法で、locals()でローカル変数が入った辞書が取れるんですね。
Python 2.5 Quick Reference
Python 2.4 クイックリファレンス
面白いので試してみたメモ。

format文字列を使ってみる

In [79]: u'Happy %(foo)s!' % {'foo':u'Java'}
Out[79]: u'Happy Java!'

string.Templateモジュールを使ってみる

In [80]: import string

In [81]: string.Template('$lng is Alive!')
Out[81]: <string.Template object at 0x128ae30>

In [82]: tmpl = string.Template('$lng is Alive!')

In [83]: tmpl.substitute({'lng':u'C'})
Out[83]: u'C is Alive!'

locals()を使ってみる

Pythonで無理矢理変数やモジュールを定義する | TRIVIAL TECHNOLOGIES @ats のイクメン日記にlocals()で取得できる辞書に新しいエントリを追加することでローカル変数を宣言することなく追加できるとあったのでこれも試してみました。確かにシンプル。

In [11]: locals()['a'] = 3333

In [12]: a
Out[12]: 3333

In [13]: if True:
   ....:     locals()['bar'] = 'var by function locals()'
   ....:     print bar
   ....: 
var by function locals()

In [14]: bar
Out[14]: 'var by function locals()'

あれー?locals()がいじるのはモジュールローカルなスコープ?関数ローカルなのは触らない?
Pythonのスコープがよくわからなくなった。続きはあとで書く。

シンボルテーブルをいじるってのはなんか俺かっこいい感があって好きです。100%自己満足ですが。

清水川記 - 清水川Webは短いコードの断片を書いてくれるのでモジュールの使い方とか書き方の参考になります。