Python のイテレータ生成関数の使い方

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

参考