Pythonジェネレーターの微妙な詳細のいくつかを理解しようとしています。同じジェネレーターとの間で値を交互に送受信できるかどうかを確認するために作成したテスト プログラムの 1 つを次に示します。
def injector():
while True:
try:
print 'a'
v = yield
print 'b', v
yield v
print 'c'
except GeneratorExit:
print 'exit'
break
g = injector()
print 'send none'
g.send(None)
print 'send 2'
g.send(2)
print 'receiving'
v = g.next()
print 'received', v
g.close()
このプログラムの期待される出力は次のとおりです。
send none
a
send 2
b 2
receiving
received 2
c
a
exit
私が得る出力は次のとおりです。
send none
a
send 2
b 2
receiving
c
a
received None
exit
さて、明らかに、問題はなぜ上記の出力が得られるのかということです。ジェネレーターの仕組みについて理解できなかったのは何ですか?