yield の戻り値を受け取る

この記事は Python Tips Advent Calendar 2012 21日目の記事です。


yield の呼び出しには戻り値があります。
普段は None ですが、呼び出し元が send 関数を使った場合、その引数が yield の戻り値として渡されます。

>>> def f(xs):
...     n = None
...     for x in xs:
...         if n is None or n == 0:
...             n = yield x
...         else:
...             n -= 1
>>> it = f([1,2,3,4,5,6,7,8,9])
>>> it.next()
1
>>> it.send(1) # skip 1
3
>>> it.send(4) # skip 4
8

it.send(1) によって n = yield x の n に 1 が渡されます。


.