Что выведет код 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 ошибок.

Термины по теме