Pythonにはリスト内包表記とよく似た表記のジェネレータ式がある。
リスト内包表記はリストを返す。
>>> [ x ** 2 for x in range(4)]
[0, 1, 4, 9]
ジェネレータ式は反復処理可能なオブジェクト「ジェネレータオブジェクト」を返す。
>>> ( x ** 2 for x in range(4))
<generator object at 0x00AB0648>
ジェネレータオブジェクトは、イテレータプロトコルをサポートしている。
>>> g = ( x ** 2 for x in range(4))
>>> g.next()
0
>>> g.next()
1
>>> g.next()
4
>>> g.next()
9
>>> g.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
ということを、『初めてのPython』を読んで知った。