2014/01/09

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


参考
Functional Programming HOWTO — Python v2.7.6 documentation

0 件のコメント: