Pythonでは、yield
とyield from
はジェネレータを作成するための重要なキーワードです。
yieldとは
yield
はPythonのジェネレータ関数内で使用され、一連の結果を生成します。例えば、次のような関数foo
があります。
def foo():
for i in range(10):
yield i
この関数を呼び出すと、0から9までの値が順番に生成されます。
yield fromとは
yield from
はPython 3.3から導入され、ジェネレータの中で別のジェネレータやイテラブルオブジェクトから値を生成するための構文です。yield from
の後に続く式が評価された結果としてイテラブルオブジェクトになる必要があります。
例えば、次のような関数buzz
があります。
def buzz():
i = 0
for j in range(10):
i += j
yield j
return i
この関数をyield from
を使って呼び出すと、return
の値まで取得できます。
def getter():
x = yield from buzz()
yield x
ただし、yield from
は関数内でしか記述できないため、注意が必要です。
まとめ
yield
を使うとジェネレータを生成できます。yield
とreturn
の併用は基本的に難しいです。yield from
を使うとreturn
の値まで取得できます。yield from
は関数内でしか使えません。
以上、Pythonのyield
とyield from
の違いについて説明しました。これらのキーワードを理解することで、Pythonのジェネレータをより効果的に利用することができます。