Python で簡単なジェネレータの例2024年03月29日 14時22分42秒

Python で、イテレータ、ジェネレータとコルーチンはかなり有用だが、段階的に概念が難しくなっており、少し時間を置くと忘れてしまう。特に、コルーチンの書き方は忘れやすい。

まずは、ジェネレータから。イテレータは list や dict 等の順次内容物を巡れるデータ構造。ジェネレータはこの機構を関数でも同じ様に出来ればとして生まれたもの。外側としては、配列等を返す関数であれば、イテレータとして使えるようになる。、配列では無く、値を複数返す一捻りを加えた物がジェネレータ。呼出側にしては、一つずつ巡っていくのには変わらない。その利点はメモリやネットワークのピークの緩和に使えるので、有用。

そして、一つの関数が複数回値を返す為に新しいキーワードが追加された。それが yield。関数内で yield 呼出し時に一旦関数の実行が呼出が中断され、再度イテレータを呼び出した時に、関数が yield 呼び出しから戻って実行される。

ここで、簡単な実例。

% cat simple_generator.py 
def generator():
    yield "one"
    yield "two"


for i in generator():
    print(i)
% python3.9 simple_generator.py 
one
two