ジェネレータは反復子を作るためのもので、通常の関数と同様に作成します。
returnの代わりにyield を使用するのが特徴です。
yieldが使用された関数ならジェネレータであると言えます。
そして、yieldで返した値を順番に覚えて置いて、next関数で呼び出すことができます。
ジェネレータは反復処理を行うたびに最後に呼び出された時にどこにいたかを管理して次の値を返します。ここが通常の関数と違うところです。
次の例はジェネレータのシンプルな例です。
def generator(): yield 0 yield 1 yield 2 for g in generator(): print(g)
結果
0
1
2
次の例は、range()を自作するものです。
def my_range(start,end,step):
current_number = start
while current_number < end:
yield current_number
current_number += step
for i in my_range(1,10,0.1):
print(i)
[/python]
結果
1
2
3
4
5
6
7
8
9