\

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博客

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です