私はジェネレーターとジェネレーター式をいじっていますが、それらがどのように機能するかを完全には理解していません(いくつかの参考資料):
>>> a = (x for x in range(10))
>>> next(a)
0
>>> next(a)
1
>>> a.send(-1)
2
>>> next(a)
3
generator.send
したがって、無視されたように見えます。yield
送信された情報をキャッチする明示的な式がないため、これは理にかなっています(私は推測します) ...
でも、
>>> a = ((yield x) for x in range(10))
>>> next(a)
0
>>> print next(a)
None
>>> print next(a)
1
>>> print next(a)
None
>>> a.send(-1) #this send is ignored, Why? ... there's a yield to catch it...
2
>>> print next(a)
None
>>> print next(a)
3
>>> a.send(-1) #this send isn't ignored
-1
私はこれがかなり遠いことを理解しています、そして私は(現在)これのユースケースを考えることができません(それで尋ねないでください;)
私は主に、これらのさまざまなジェネレーターメソッドがどのように機能するか(およびジェネレーター式が一般的にどのように機能するか)を理解しようとしています。なぜ私の2番目の例は賢明な値を生み出すこととを交互に行うのNone
ですか?また、私generator.send
の一方が無視され、もう一方が無視されなかった理由を誰かが説明できますか?