выход в списках и генераторах выражений
Следующее поведение кажется мне довольно нелогичным (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, но третья строка - нет.
Кроме того, это кажется странным
что понимание списка возвращает генератор, а не списоки что выражение генератора, преобразованное в список, и соответствующее понимание списка содержат разные значения.Может ли кто-нибудь предоставить больше информации?