数年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