Первая строка вывода — [0, 1, 2, 3, 4], вторая — представление объекта генератора, а не его элементы.
Сравнение list comprehension и generator expression
Первая строка вывода — [0, 1, 2, 3, 4], вторая — представление объекта генератора, а не его элементы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что будет напечатано после выполнения следующего кода:
print([i for i in range(5)])
print((i for i in range(5)))
Ответ
Первая строка вывода — [0, 1, 2, 3, 4], вторая — представление объекта генератора, а не его элементы.
[0, 1, 2, 3, 4]
<generator object <genexpr> at ...>
Адрес и точное представление генератора зависят от запуска. List comprehension сразу вычисляет значения и создаёт список. Generator expression создаёт ленивый объект, который выдаёт элементы по мере обхода.
Чтобы увидеть его значения, выполните print(list(i for i in range(5))). После полного обхода тот же генератор будет исчерпан. Для больших последовательностей генератор позволяет не хранить весь результат, если потребитель также обрабатывает элементы по одному.