Pythonのyield
は、ジェネレータ関数を定義する際に使用されるキーワードです。ジェネレータ関数は、イテレータを返す特殊な関数です。
Pythonのyieldとは?
Pythonのyield
とは、ジェネレータ関数を定義する際に使用されるキーワードのことです。ジェネレータ関数は、イテレータを返す特殊な関数です。対して通常の関数は、呼び出されると処理を実行し、結果を返すと終了します。yield
キーワードを使用することで、ジェネレータ関数はイテレータを作成し、値を逐次的に生成します。
以下に、yield
を使用したジェネレータ関数の例を示します:
def count_up_to(n):
i = 1
while i <= n:
yield i
i += 1
# ジェネレータ関数を呼び出してイテレータを取得
iterator = count_up_to(5)
# イテレータから値を逐次的に取得
print(next(iterator)) # 1
print(next(iterator)) # 2
print(next(iterator)) # 3
print(next(iterator)) # 4
print(next(iterator)) # 5
# イテレータの末尾に到達するとStopIterationが発生する
# print(next(iterator)) # StopIterationエラー
yieldの中のyieldとは?
yield
の中にyield
を書くと、最初のyield
が評価されて値を生成し、その後ジェネレータがブロックされます。次にジェネレータに入るとき、つまり次にnext
が呼ばれるとき、最初のyield
はNone
を評価し、その値が外側のyield
の引数となり、次のnext
の戻り値となります。
以下に、yield
の中にyield
を書いたジェネレータ関数の例を示します:
def mygen():
yield (yield 1)
a = mygen()
print(next(a)) # 1
print(next(a)) # None
この例では、最初にnext(a)
を呼び出すと、ジェネレータ関数mygen
の本体が最初のyield
まで評価されます。そのyield
はnext
の戻り値として1
を生成し、次にジェネレータに入るまでブロックします。次にnext(a)
を呼び出すと、ジェネレータに値が送られず、最初のyield
はNone
を評価します。その値が外側のyield
の引数となり、次のnext
の戻り値となります。
以上がPythonのyield
とその中のyield
についての基本的な説明です。この概念を理解することで、Pythonのジェネレータとその強力な機能をより深く理解することができます。