関数でジェネレータをつくることもできる。
例
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index]
この関数ではreturn
文の代わりにyield
文を使う。yield
文がfor
文の内部にあることに注意。yield
文に達するとこの関数は一時停止し値を返すが、この関数のローカル変数などは保持されたままである。この一時停止の解除はこの関数を呼んだプログラムの要請による(同期している)。
上の関数の実行例を示す。
>>> s = reverse('golf')
>>> s
<generator object reverse at 0x0000000002ED07C8>
>>> next(s)
'f'
>>> next(s)
'l'
>>> next(s)
'o'
>>> next(s)
'g'
>>> next(s)
Traceback (most recent call last):
File "<pyshell#7>", line 1, in
next(s)
StopIteration
>>>