《20》デザインパターン〈GoF〉Iterator(補足)〈Python 3.0 版〉
実録:はじめてのプログラミング《記事一覧》
《20》デザインパターン〈GoF〉Iterator(補足)
《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
第3版♪2009/02/28
関連記事
デザインパターン〈GoF〉Iterator(補足)
メソッド __iter__ は、基本構文 for..in や組み込み関数などに呼応して、各要素を参照する手段を提供します。
def ex___iter__():
X = 's = myList("ABC"); s'
print(">>>",X)
eval(compile(X,"","single"))
X = '[e for e in s]'
print(">>>",X)
print(eval(X))
X = '{e:ord(e) for e in s}'
print(">>>",X)
print(eval(X))
X = 'reduce(lambda s,e: e+s, s, "")'
print(">>>",X)
print(eval(X))
X = 'list(map(lambda e: ord(e), s))'
print(">>>",X)
print(eval(X))
X = 'list(filter(lambda e: ord(e)%2, s))'
print(">>>",X)
print(eval(X))
事例
デザインパターン〈GoF〉Iterator の効用は、さまざまな状況で得られます。
>>> s = myList("ABC"); s
['A', 'B', 'C']
連結リスト s は、各要素に(長さ1の)文字列を保持しています。
>>> [e for e in s] ['A', 'B', 'C']
基本構文 for/in を利用して、連結リスト s の各要素 e を参照できます。
>>> {i:e for i,e in enumerate(s)}
{0: 'A', 1: 'B', 2: 'C'}
《Release 2.3.5》組み込み関数 enumerate を利用すると、連結リスト s の各要素 e に対してオフセット位置 i が得られます。
>>> reduce(lambda s,e: e+s, s, "")
CBA
《Release 1.5.2》組み込み関数 reduce を利用すると、連結リスト s の各要素 e をもとに、逆順に並べた文字列 'CBA' が得られます。
>>> list(map(lambda e: ord(e), s))
[65, 66, 67]
《Release 1.5.2》組み込み関数 map を利用すると、連結リスト s の各要素 e をもとに、その文字コードを並べたリストが得られます。
>>> filter(lambda e: ord(e)%2, myList("ABC"))
['A', 'C']
《Release 1.5.2》組み込み関数 filter を利用すると、連結リスト s の各要素 e をもとに、条件式 ord(e)%2 を満たす要素 e だけを並べたリストが得られます。
>>> [s+t for s,t in zip(myList("ABC"),myList("123"))]
['A1', 'B2', 'C3']
《Release 2.0.1》組み込み関数 zip を利用すると、2つの連結リスト myList に対して、同じオフセット位置にある各要素 s,t を参照できます。
Tips
Last updated♪09/03/20