メモ
- 変数はファーストクラスオブジェクトではないので、変数から変数名を取得できない。
- 変数から変数名を直接取得する簡単な方法がないので、取得したい場合は、リストや辞書などで関連付けしておく必要がある。
- 変数に関数オブジェクトを代入する場合は、関数のfunc_name属性と__doc__属性を設定しておく。func_nameの値は変数名と同じ文字列にしておく。
- Pythonはブロックもファーストクラスオブジェクトではない。lambda式で式1つのブロックなら値になるが、これはブロックではなく関数である。
- タプルのリストは要素が何か分かりづらいが、forとアンパック代入と組み合わせれば一時変数に代入できるので分かりやすい。
>>> L = [('a', 1), ('b', 2), ('c', 3)] >>> for name, value in L: >>> print name, value a 1 b 2 c 3
- NFOアプローチは無意味な関数定義が入るので分かりづらい。object()を属性の保存場所として使える。
あとでもう少し整理するつもり。
追記(2008/8/22):
object()は、属性の追加が不可能であるので、NFOアプローチとして使用できない。NFOアプローチ(関数を属性の保管場所として利用する手法)の意義は、クラスだと属性が特別な意味を持つ場合がある(メソッドへの自動昇格やマングリング化)が、関数の属性は特別な意味を持たない。その違いと手軽さの2つに意義がある。