Pythonのyield
は非常に強力で柔軟なツールであり、ジェネレータとイテレータの実装において重要な役割を果たしています。
yieldとは何か?
yield
はPythonのキーワードで、ジェネレータ関数と一緒に使われます。yield
は現在のプログラムの実行状態を保存する役割を果たします。yield
を含む関数はジェネレータと呼ばれ、イテレータと同じように、一度にすべての要素を計算するのではなく、一度に一つずつ要素を計算することで、多くの空間を節約することができます。
yieldとreturnの違いは何か?
関数がreturn
に到達すると、関数はすぐにすべての結果を返し、その関数を終了し、その関数内のローカル変数を破棄します。しかし、yield
を持つ関数は、ジェネレータ(生成器)オブジェクトという反復可能なオブジェクトを返します。このジェネレータオブジェクトは、forループを使用したり、next()
メソッドを呼び出すことで結果を抽出することができます。
ジェネレータ関数とは何か?
Pythonでは、yield
を使用した関数はジェネレータ関数と呼ばれます。ジェネレータ関数を呼び出すと、ジェネレータオブジェクトが返されます。ジェネレータ関数は、yield
に遭遇するたびに関数を一時停止し、現在のすべての実行情報(ローカル変数を保持)を保存します。そして、次にnext()
メソッドが実行されると、現在の位置から実行を再開し、ジェネレータが完全に反復処理されるまで続けます。
例
以下に、ジェネレータ関数の簡単な例を示します。
def myexample():
x = 1
y = 10
while x < y:
yield x
x += 1
example = myexample()
for i in example:
print(i)
この例では、myexample
関数はジェネレータを返します。next()
メソッドを呼び出すと、関数は実行を開始し、最初のyield
キーワードに遭遇します。この時点で、生成された値(1)が返され、プログラムは一時停止します。次にnext()
メソッドを呼び出すと、コードは前回停止した位置から実行を再開し、次のyield
キーワードに遭遇します。この時点で、生成された値(2)が返され、プログラムは再び一時停止します。このプロセスは、ジェネレータが枯渇し、プログラムが終了するまで続きます。
まとめ
この記事では、Pythonのyield
関数について説明しました。yield
はジェネレータ関数と一緒に使われ、現在のプログラムの実行状態を保存する役割を果たします。また、yield
を持つ関数はジェネレータと呼ばれ、一度に一つずつ要素を計算することで、多くの空間を節約することができます。最後に、ジェネレータ関数の簡単な例を示しました。
- 参考文献:
- 如何理解Python中的yield用法? – 知乎
- Python | yield关键字详解 – 张Zong在修行 – 博客园
- 深入解析Python中yield函数的使用 – CSDN博客
- Python中yield详解_yield(x,y)函数-CSDN博客