выход в списках и генераторах выражений

Следующее поведение кажется мне довольно нелогичным (Python 3.4):

>>> [(yield i) for i in range(3)]
<generator object <listcomp> at 0x0245C148>
>>> list([(yield i) for i in range(3)])
[0, 1, 2]
>>> list((yield i) for i in range(3))
[0, None, 1, None, 2, None]

Промежуточные значения последней строки на самом деле не всегдаNoneони все что мыsend в генератор, эквивалентный (я думаю) следующему генератору:

def f():
   for i in range(3):
      yield (yield i)

Мне кажется смешным, что эти три строки работают вообще.Ссылка Говорит, чтоyield разрешено только в определении функции (хотя, возможно, я неправильно ее читаю и / или она может быть просто скопирована из более старой версии). Первые две строки даютSyntaxError в Python 2.7, но третья строка - нет.

Кроме того, это кажется странным

что понимание списка возвращает генератор, а не списоки что выражение генератора, преобразованное в список, и соответствующее понимание списка содержат разные значения.

Может ли кто-нибудь предоставить больше информации?

Ответы на вопрос(1)

Ваш ответ на вопрос