pythonのyieldについて

数年Pythonを使ってきたけれど、今日始めてyieldを使ってみた。
これを使うことで、変化のある繰り返し処理を簡単に実装できる。

例1は複数のyieldを一つのメソッドの中で呼び出しておき、これを実体化したものをイテレータとして使用する。
yieldで宣言した順番に結果が返される。

例2は無限ループを利用し、一定のルールに従った値を返すようにしている。
今回は単純にインクリメントされるようにしたが、条件分岐などを入れてより複雑にすることもできる。

例1:

def generator1():
    yield 1
    yield 2
    yield 3

g = generator1()
print(g.__next__()) # 1
print(g.__next__()) # 2
print(g.__next__()) # 3
g.close()

例2:

def generator2():
    num = 0
    while True:
        yield num
        num += 1

for i in generator2():
    print(i)
    if i >= 5:
        break
# => 0, 1, 2, 3, 4, 5