auの日記

プログラミング初心者の日記。(auはハンドルネームです)

Pythonのyieldってなんだ

auです。

Pythonのコードの中に「yield」が出てきました。分からなかったので調べてみます。

yieldとは

yieldとは、関数を一時的に停止する機能を持つ文です。

直訳だと「もたらす、生む、譲渡する」という意味があります。

returnが、関数を終了するのに対して、yieldは途中の値を返して中断する感じです。

実際に書いてみます。

def test_yield(a, b):
    c = a + b
    yield c
    d = c * c
    yield d


result_yield = test_yield(1, 2)
print(result_yield) # <generator object test_yield at 0x10be8c750>
print(result_yield.__next__()) # 3
print(result_yield.__next__()) # 9

print(result_yield.__next__())
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    print(result_yield.__next__())
StopIteration

関数を実行すると、generator objectが返ってきています。

そして、__next__()を実行することで、yieldまで実行します。

Python3系だと__next__()で、2系だとnext()の違いがあるようです。