Pythonでは、関数内でyieldを使用すると、その関数はジェネレータとして動作します。例えば、以下のような関数fooを考えてみましょう。
def foo():
for i in range(10):
yield i
この関数を呼び出すと、0から9までの値が順に生成されます。
しかし、yieldとreturnを同じ関数内で併用すると、yieldの結果のみが返され、returnの結果は無視されます。これはPythonの仕様で、ジェネレータ内でのreturnはStopIterationとして扱われるためです。
したがって、基本的にはyieldとreturnの併用は難しく、どちらか一方を選ぶことが推奨されます。
ただし、何らかの理由でreturnと併用したい場合には、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
このように、yield fromを使用すると、returnの値まで取得できます。ただし、yield fromは関数内でしか使用できないので注意が必要です。
以上が、Pythonにおけるyieldとreturnの併用についての説明です。この情報がPythonの理解に役立つことを願っています。