Попытка понять урожай как выражение

Я играю с генераторами и выражениями генератора, и я не совсем уверен, что понимаю, как они работают (некоторые справочные материалы):

>>> 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

Я понимаю, что это довольно далеко, и я (в настоящее время) не могу придумать вариант использования для этого (так что не спрашивайте;)

В основном я просто пытаюсь выяснить, как работают эти различные методы генераторов (и как работают генераторные выражения в целом). Почему мой второй пример чередуется с получением разумного значения иNone? Кроме того, может кто-нибудь объяснить, почему один из моихgenerator.send's был проигнорирован, в то время как другой не был'?

Ответы на вопрос(5)

Ваш ответ на вопрос