iter に関数を渡す

この記事は Python Tips Advent Calendar 2012 17日目の記事です。


iter 関数は、iterable オブジェクトから iterator を取り出す関数です。

>>> xs = [1,2,3]
>>> it = iter(xs)
>>> it.next()
1
>>> it.next()
2
>>> it.next()
3
>>> it.next() #doctest: +ELLIPSIS
Traceback (most recent call last):
    ...
StopIteration

このように iter 関数に iterable オブジェクトを渡すのが通常の使い方ですが、この iter 関数の引数には、関数も渡すことができます。

>>> import StringIO
>>> msg = '''\
... aaa
... bbb
... ccc
... 
... eee
... '''
>>> strs = StringIO.StringIO(msg)
>>> for line in iter(strs.readline, '\n'): # 空行が現れるまで読む
...   print line[:-1]
aaa
bbb
ccc

このように、第一引数に関数を、第二引数にその関数が何を返したら終了するかという条件を指定すると、その条件が現れるまで関数を呼び続けます。


.