Pythonのfor構文には、Iterator(イテレータ)という側面があります。このIteratorを作成する仕組みをGeneratorと言います。ここでは、IteratorとGeneratorについて、サンプルコードを用いて説明しています。
Iteratorとは
IteratorとはList型などの値を1つずつ取り出す仕組みのことです。iter()関数とnext()関数を用いることで、値を1つずつ取り出すことができます。
Iteratorを用いた使用例
#Iteratorを用いた使用例
>>> test = [55,70,90]
>>> i = iter(nums)
>>> next(i)
55
>>> next(i)
70
>>> next(i)
90
REPLで上記のように動かすと1つずつ取り出せます。全ての値を取り出して「next(i)」とすると、「StopIteration」というエラーになります。
Generatorとは
GeneratorとはIteratorを作成する仕組みのことです。yield文を使用することでGeneratorを作成することが可能です。yield文は関数内の状態をすべて保存して、再び、関数が呼ばれると保存した直後の値から処理を実行します。
Generatorを用いた使用例
#Generatorを用いた使用例
def get_num():
i = 1
while i <= 20:
yield i
i += 2
iter_num = get_num()
for get_range in iter_num:
print(get_range,end=",")
#出力結果は「1,3,5,7,9,11,13,15,17,19,」です。
上記のプログラムは20以下の素数を返す「Iterator」「Generator」となっています。
繰り返し処理を用いるとき「Iterator」「Generator」の考え方を理解しておくと効率の良いプログラムを意識できます。