\

Pythonのyieldは、ジェネレータ関数を定義する際に使用されるキーワードです。ジェネレータ関数は、イテレータを返す特殊な関数です。

Pythonのyieldとは?

Pythonのyieldとは、ジェネレータ関数を定義する際に使用されるキーワードのことです。ジェネレータ関数は、イテレータを返す特殊な関数です。対して通常の関数は、呼び出されると処理を実行し、結果を返すと終了します。yieldキーワードを使用することで、ジェネレータ関数はイテレータを作成し、値を逐次的に生成します。

以下に、yieldを使用したジェネレータ関数の例を示します:

def count_up_to(n):
    i = 1
    while i <= n:
        yield i
        i += 1

# ジェネレータ関数を呼び出してイテレータを取得
iterator = count_up_to(5)

# イテレータから値を逐次的に取得
print(next(iterator))  # 1
print(next(iterator))  # 2
print(next(iterator))  # 3
print(next(iterator))  # 4
print(next(iterator))  # 5

# イテレータの末尾に到達するとStopIterationが発生する
# print(next(iterator))  # StopIterationエラー

yieldの中のyieldとは?

yieldの中にyieldを書くと、最初のyieldが評価されて値を生成し、その後ジェネレータがブロックされます。次にジェネレータに入るとき、つまり次にnextが呼ばれるとき、最初のyieldNoneを評価し、その値が外側のyieldの引数となり、次のnextの戻り値となります。

以下に、yieldの中にyieldを書いたジェネレータ関数の例を示します:

def mygen():
    yield (yield 1)

a = mygen()
print(next(a))  # 1
print(next(a))  # None

この例では、最初にnext(a)を呼び出すと、ジェネレータ関数mygenの本体が最初のyieldまで評価されます。そのyieldnextの戻り値として1を生成し、次にジェネレータに入るまでブロックします。次にnext(a)を呼び出すと、ジェネレータに値が送られず、最初のyieldNoneを評価します。その値が外側のyieldの引数となり、次のnextの戻り値となります。

以上がPythonのyieldとその中のyieldについての基本的な説明です。この概念を理解することで、Pythonのジェネレータとその強力な機能をより深く理解することができます。

投稿者 admin

コメントを残す

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