Pythonでは、yield
とyield from
はジェネレータを作成するための重要なキーワードです。
yieldとは
yield
はPythonのジェネレータ関数内で使用され、関数の実行を一時停止し、値を生成します。例えば、次のようなコードがあります。
def foo():
for i in range(10):
yield i
この関数foo
は0から9までの値を順に生成するジェネレータです。
yieldとreturnの併用
yield
とreturn
を同時に使用することは可能ですが、return
はジェネレータ内でStopIteration
として扱われます。したがって、yield
とreturn
の併用は基本的には難しく、yield
かreturn
のどちらかに絞るのが良いとされています。
yield fromとは
yield from
は、あるジェネレータが別のジェネレータを呼び出す必要がある場合に使用されます。yield from
を使用すると、return
に設定した値を取得することができます。
def buzz():
i = 0
for j in range(10):
i += j
yield j
return i
def getter():
x = yield from buzz()
yield x
上記のコードでは、getter
関数はbuzz
関数から生成された値を順に生成し、最後にbuzz
関数のreturn
値を生成します。
まとめ
yield
を使うとジェネレータを生成できます。yield
とreturn
の併用は基本的には難しいです。yield from
を使うと、return
の値までを取得できます。yield from
は関数内でしか使えません。- 結局は
yield
かreturn
に絞ったほうが良いです。
以上、Pythonのyield
とyield from
についての基本的な説明でした。これらのキーワードを理解し、適切に使用することで、より効率的で読みやすいコードを書くことができます。