Tentando entender o rendimento como uma expressão

Estou brincando com geradores e expressões geradoras e não tenho certeza absoluta de que entendi como eles funcionam (algum material de referência):

>>> a = (x for x in range(10))
>>> next(a)
0
>>> next(a)
1
>>> a.send(-1)
2
>>> next(a)
3

Então parece quegenerator.send foi ignorado. Isso faz sentido (eu acho) porque não há explícitoyield expressão para pegar a informação enviada ...

Contudo,

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

Eu entendo que isso está muito longe, e eu (atualmente) não consigo pensar em um caso de uso para isso (então não pergunte);

Na maioria das vezes, estou apenas explorando para tentar descobrir como esses vários métodos geradores funcionam (e como as expressões geradoras funcionam em geral). Por que meu segundo exemplo alterna entre produzir um valor sensato eNone? Além disso, alguém pode explicar por que um dos meusgenerator.sendfoi ignorado enquanto o outro não era?

questionAnswers(5)

yourAnswerToTheQuestion