ジェネレータとyield文

入門Python3 4.8


これはC#でもあった反復処理の実装とまったく同じ話ですね。

yield文を使えば、そのyield文があるところまで処理が走り、一旦関数を抜けて処理が進みまたyield文のところから次の処理が再開されるといった感じになってます。

文章だとわけわからんので実装見た方が早いですね。

def foo ():
    yield 1
    yield 2
    yield 3

for i in foo():
    print(i)
$ py main.py
1
2
3

上記のようにyieldで指定した値がiに格納されていってますね。

このyield文を使ってrange関数と似たような処理をする関数を実装してみます。

def my_range (start,end):
    i = start
    # サンプルなのでendよりstartの方が数値が大きい場合を想定しない
    while(i < end):
        yield i
        i += 1

for i in my_range(0,5):
    print(i)
$ py main.py
0
1
2
3
4

便利な機能ですね、今後も使っていきましょう。