6. sendメソッド
>>> def hoge():
... s = (yield 'a')
... s = (yield s + 'b')
... s = (yield s + 'c')
...
>>> g = hoge()
>>> print g.send(None)
a
>>> print g.send('x')
xb
>>> print g.send('y')
yc
>>> print g.send('z')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
呼出し側からジェネレータに
値を渡すことができる
ただし
最初の呼び出しは値を渡せない
!
send(None) は next() でも可
最初だけnext()なのは気持ち悪い
7. 状態遷移モデル
def stateManagerGenerator():
while True:
ev = (yield State.FIRST)
if ev == Event.GOTO_SECOND:
break
while True:
ev = (yield State.SECOND)
if ev == Event.GOTO_END:
break
while True:
ev = (yield State.END)
!
sm = stateManagerGenerator()
state = sm.send(None) #=> FIRST
state = sm.send(Event.DUMMY) #=> FIRST
state = sm.send(Event.GOTO_SECOND) #=> SECOND
受け取ったevに応じて
次の状態に進む
状態遷移の規則を
ひとつの関数に
まとめられる