2016-01-27 11 views
6

Qual è la differenza tra la comprensione degli elenchi e la comprensione dei generatori con yield all'interno? Entrambi restituiscono un oggetto generatore (listcomp e genexpr rispettivamente), ma a piena valutazione quest'ultimo aggiunge ciò che sembra essere superfluo None s.Differenza tra la comprensione degli elenchi e la comprensione del generatore con `yield` all'interno di

>>> list([(yield from a) for a in zip("abcde", itertools.cycle("12"))]) 
['a', '1', 'b', '2', 'c', '1', 'd', '2', 'e', '1'] 

>>> list(((yield from a) for a in zip("abcde", itertools.cycle("12")))) 
['a', '1', None, 'b', '2', None, 'c', '1', None, 'd', '2', None, 'e', '1', None] 

Come mai? Qual è la spiegazione scientifica?

+1

@Alik, @Antti Haapala, rimuovere la dicitura "duplicato". Questa domanda richiede il comportamento usando una dichiarazione 'yield from' di Python. La risposta "duplicata" collegata pone una domanda simile sull'istruzione Python "yield". Queste due affermazioni sono distinte. E poiché "yield from" è stato aggiunto solo di recente al linguaggio, è naturale che ci siano nuovi comportamenti imprevisti che produce. Ciò dovrebbe portare ad alcune domande che, sebbene possano assomigliare alle domande su "yield", non sono le stesse domande di "yield". –

+0

stai ancora cercando una risposta alla tua domanda? – Daniel

risposta

0

Il valore dell'espressione yield from è None. Il fatto che il tuo secondo esempio sia un'espressione di generatore significa che è già implicitamente derivante dall'iteratore, quindi produrrà anche il valore dell'espressione yield from. Vedi this per una risposta più dettagliata.

+0

Non spiega la differenza tra la 'yield from' evaluation nella comprensione del generatore e la list comprehension sebbene la comprensione delle liste –

+0

non abbia implicito rendimento, quindi questo comportamento non si verifica. –

Problemi correlati