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 が渡されます。
.