Проверяет понимание разницы между списковыми выражениями и генераторами.
Если comprehension записан в круглых скобках, создаётся генератор, а не список. Генератор вычисляет значения по мере необходимости, а не сразу. Это экономит память. Такой объект можно перебирать, но нельзя индексировать как список.
Запись comprehension в круглых скобках означает, что создаётся генераторное выражение.
Генераторное выражение — это выражение, которое:
возвращает значения по одному
не хранит всю коллекцию в памяти
создаёт iterator
Пример:
gen = (x * x for x in range(1000000))
Здесь память не заполняется миллионом элементов.
Список:
lst = [x * x for x in range(1000000)]
Создаёт все элементы сразу.
Генератор:
gen = (x * x for x in range(1000000))
Создаёт элементы при запросе.
Генераторы полезны:
при работе с большими данными
при чтении файлов
при обработке потоков данных
Пример:
total = sum(x * x for x in range(1000000))
Здесь генератор работает эффективнее списка.
Генераторы:
нельзя индексировать
нельзя узнать длину
проходят только один раз
Круглые скобки в comprehension создают генератор. Это ленивый способ вычислений, который экономит память и удобен при обработке больших данных.