\

Pythonでは、関数内でyieldを使用すると、その関数はジェネレータとして動作します。ジェネレータは、関数の状態を保持しながら値を呼び出し元に返すことができます。

yieldreturnの主な違いは、returnが関数の処理を終了し、値を返すのに対し、yieldは関数の処理を一時停止し、値を返します。そして、その関数が再度呼び出されると、yieldの次の行から処理が再開されます。

def func():
    a = 10
    b = 20
    c = a + b
    yield c  # ここで一旦停止

    a = 100
    b = 200
    c = a + b
    yield c  # ここで一旦停止

    a = 1000
    b = 2000
    c = a + b
    yield c  # ここで一旦停止

for x in func():
    print(x)

上記のコードでは、yieldがなくなるまでfor文が回り続けます。for文の裏側で「処理(yieldまで) ⇒ 一旦停止 ⇒ 再開(yieldまで) ⇒ 一旦停止」が繰り返され、その都度、yieldの返す値がxに代入されます。

また、Python 3では、ジェネレータ内でreturnを使用すると、StopIteration例外が発生します。これは、yieldreturnの併用が難しいことを示しています。しかし、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

for x in getter():
    print(x)

このように、Pythonのyieldreturnを理解し、適切に活用することで、より効率的なコードを書くことができます。

投稿者 admin

コメントを残す

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