JuniorКодЧастоЕщё не отвечали
Что выведет двойное преобразование генератора в список?
Предскажите обе строки.
g = (x for x in range(3))
print(list(g)) # (1)
print(list(g)) # (2)
Определите вывод и объясните.
(1) [0, 1, 2], (2) []. Генераторы ленивы и одноразовы — будучи исчерпанными, они ничего не выдают при втором проходе. Пересоздайте генератор или материализуйте его в список, если нужно пройти более одного раза.
- ✗Ожидать, что генератор перезапустится на втором проходе
- ✗Думать, что исчерпание возбуждает StopIteration для вызывающего list()
- ✗Переиспользовать генератор там, где нужен список
- →Почему
list()возвращает[], а не падает на исчерпанном генераторе? - →Когда одноразовый генератор предпочтительнее материализации в список?