Что выведет код Senior Итераторы и генераторы обновлено
Ленивое условие в генераторном выражении
Вопрос
Что выведет код? По строке на каждый print.
data = [1, 2, 3]
g = (x for x in data if x in data)
data = [2, 3, 4]
print(list(g))
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: [2, 3]. В генераторном выражении сразу вычисляется только самый внешний итерируемый data (старый список [1, 2, 3]).
Что выведет
[2, 3]
Разбор
В генераторном выражении сразу вычисляется только самый внешний итерируемый data (старый список [1, 2, 3]). Условие x in data вычисляется лениво, при обходе, и видит уже новый data = [2, 3, 4]. Поэтому проходят только 2 и 3.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Итераторы и генераторы»
- Когда выполняется тело генератора
- Разбить последовательность на пачки
- Рекурсивно развернуть вложенные списки
- Конвейер обработки лога на генераторах
- Свой итерируемый класс, который можно обходить много раз
- Когда выполняется finally в недочитанном генераторе
- Полезные функции itertools
- Ленивые вычисления