《46》更新:メソッド setdefault〈Python 2.x 版〉
実録:はじめてのプログラミング《記事一覧》
《46》更新:メソッド setdefault
《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
2009年3月18日(水)
今日の進捗
- The Python Standard Library: Mapping Types — dict
- Python.use(better) -- セミナー研修テキスト
- 連想リスト課題を「続・ひよ子のきもち」で公開
Comment | |
---|---|
本人:野中 | メタプログラミングが楽しくなってきました。それさえもプログラミングなのだからメタメタプログラミングも可能と知って気が遠くなってきそうです。 |
担当:伊藤/本間 | 。(^^) |
デザインパターン〈GoF〉Iterator
組み込み型 dict と同様に、イテレーターを利用して各要素を参照できると便利です。すると、
def ex(): m = myDict((e,ord(e)) for e in "ABC") print m,"\t#",m.__class__.__name__ for e in m: print e, print "\t# __iter__" for e in m.keys(): print e, print "\t# keys" for e in m.values(): print e, print "\t# values" for e in m.items(): print e, print "\t# items" >>> ex() {'A': 65, 'B': 66, 'C': 67} # myDict A B C # __iter__ A B C # keys 65 66 67 # values ('A', 65) ('B', 66) ('C', 67) # items
for 文とともに利用すると、各キー要素(文字列)を順に参照できます。つまり、メソッド keys を利用するのと同じです。メソッド values を利用すると、各値要素(ASCII コード値)を順に参照できます。メソッド items を利用すると、各要素対(タプル)を順に参照できます。
class myDict(object): ... def __iter__(self): for e in self.keys(): yield e def keys(self): return self._keys def values(self): return self._values def items(self): s = [] for k,v in zip(self._keys, self._values): s.append((k,v)) return s
メソッド __iter__ は、基本構文 for..in などに呼応して、各要素を参照する手段を提供します。yield 文を利用すると、要素(処理済/未処理)の取扱いが容易になります。
メソッド keys/values を実現するときには、属性 self._keys/self._values をリターン値にするだけです。メソッド items では、組み込み関数 zip を使って同じオフセット位置にある各要素対を順に参照しながら、要素対のタプル (k,v) を生成して追加します。
Tips
Last updated♪09/03/19