《20》デザインパターン〈GoF〉Iterator(補足)〈Python 3.0 版〉

実録:はじめてのプログラミング記事一覧
《20》デザインパターンGoFIterator(補足)

《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
第3版♪2009/02/28

デザインパターンGoFIterator(補足)

メソッド __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))

事例

デザインパターンGoFIterator の効用は、さまざまな状況で得られます。

>>> 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