Pythonのyieldとは?
Pythonの yield
は、ジェネレータ関数を定義する際に使用されるキーワードで、イテレータを返して値を逐次的に生成します。この記事では、yieldの概念と利点、forループやyield fromの使い方、実践的な例などを詳しく紹介します。
イテレータとジェネレータ
Pythonにはイテレータとジェネレータという概念があります。イテレータとは、反復して要素を取り出すことが出来る型のことを言います。Pythonのリストやセット、辞書型はイテレーションすることが出来るので、これらのオブジェクトはイテレータになります。
また、ジェネレータは、イテレータの一種になります。要素を取り出すごとに処理を実行して、要素を生成することが出来ます。そしてこのジェネレータを、yieldを使って作ることが出来ます。
yieldの基本的な使い方
yieldは、基本的には関数の中で使われる文になります。以下がその具体例です。
def simple_generator():
yield 1
yield 2
yield 3
for value in simple_generator():
print(value)
上記のコードを実行すると、「1」「2」「3」が順番に出力されます。simple_generator 関数はジェネレータ関数であり、「yield」を使用して値をひとつずつ生成。forループはジェネレータから値を取得し、全ての値が取り出されるとループが終了します。
yield fromの使い方
yield from
は、Python 3.3 以降で利用可能な構文で、ジェネレータの中で別のジェネレータの値をyieldするためのものです。以下にその使用例を示します。
def count_up_to(n):
count = 1
while count <= n:
yield count
count += 1
def count_up_to_twice(n):
yield from count_up_to(n)
yield from count_up_to(n)
for number in count_up_to_twice(5):
print(number)
このコードでは、count_up_to_twice
関数が count_up_to
関数のジェネレータを2回 yield しています。
まとめ
Pythonの yield
は、ジェネレータ関数を定義する際に使用されるキーワードで、イテレータを返して値を逐次的に生成します。大量のデータを一度にロードする必要がなく、必要なときに値を生成できるため、大規模なデータを扱う際や、リアルタイムでデータを処理する必要がある場合に、とても有効です。