フォーマット記法と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は短いコードの断片を書いてくれるのでモジュールの使い方とか書き方の参考になります。