Sto giocando intorno con generatori e le espressioni del generatore e non sono del tutto sicura di aver capito come funzionano (some reference material):tentare di capire il rendimento come espressione
>>> a = (x for x in range(10))
>>> next(a)
0
>>> next(a)
1
>>> a.send(-1)
2
>>> next(a)
3
così sembra generator.send
era ignorato. Che abbia un senso (credo) perché non c'è esplicito yield
espressione di catturare le informazioni inviate ...
Tuttavia,
>>> 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
Capisco che questo è piuttosto lontano là fuori, e io (al momento) può Pensiamo a un caso d'uso per questo (quindi non chiedete;)
Per lo più sto solo esplorando per cercare di capire come funzionano questi vari metodi di generatore (e come le espressioni generatrici funzionano in generale). Perché il mio secondo esempio si alterna tra la resa di un valore ragionevole e None
? Inoltre, qualcuno può spiegare perché uno dei miei generator.send
è stato ignorato mentre l'altro no?
Controlla se questo collegamento può aiutarti ... http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained –