В чем разница между пониманиями списков и понятием генератора с yield
внутри? Оба возвращают объект-генератор (listcomp
и genexpr
соответственно), но при полной оценке последний добавляет то, что кажется излишним None
s.
>>> 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]
Как получилось? Что такое научное объяснение?