burdakovd
@burdakovd

Коварные генераторы Python?

numbers = range(10)
squares = (x * x for x in range(10))
fours = (x * x for x in squares)
zip(squares, fours)


Что выведет код?


Результатом будет "[(0, 1), (4, 81), (16, 625), (36, 2401), (64, 6561)]"


Разгадка в том, что питоновские генераторы не «ленивые списки», а одноразовые генераторы.

Обычно случай повторного использования генератора сразу детектится — т.к. на второй раз он возвращает пустую последовательность, но в данном случае пустая последовательность не возвращается, т.к. генератор читается «дважды» параллельно by zip.


Also: sandersn.com/blog//index.php/2009/06/29/python_s_i...
  • Вопрос задан
  • 2693 просмотра
Пригласить эксперта
Ответы на вопрос 1
Amper
@Amper
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы