Python でイテレータを生成する関数の使い方についてご紹介します。
このイテレータを生成する関数のことを Python では「ジェネレータ」と呼んだりします。
具体的には、通常関数が戻り値を返す return
文の代わりに yield
文を使うような関数を定義します。
たとえば。
# フィボナッチ数列を生成するイテレータを返す関数を定義
def fib_gen():
f1 = 0
f2 = 1
while True:
yield f2
f1, f2 = f2, f1 + f2
# イテレータを生成
fib = fib_gen()
# for文でイテレータを回す
for n in fib:
print n,
if n > 10: break
# => 1 1 2 3 5 8 13
ここで fib
はフィボナッチ数列を返すイテレータとなっています。
for
文はイテレータを自動的に回してくれるのでこのような挙動になりますが、組み込みの next()
関数で1つずつ回すことも可能です。
上のコードのあとにつづけて次のコードを書くと次のような結果が出てきます。
next(fib) # => 21
next(fib) # => 34