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.send
foi ignorado enquanto o outro não era?