Когда вы создаёте список, Python хранит все элементы в памяти. Если вы работаете с миллионами элементов — это неэффективно.
**Генераторы** — это способ ленивой генерации значений. Они не хранят все значения, а создают их по одному.
🔹 Пример обычного списка:
nums = [x**2 for x in range(1000000)]
🔹 Пример генератора:
nums = (x**2 for x in range(1000000))
Разница — колоссальная экономия памяти.
Также можно использовать функцию `yield`:
def count_up_to(n):
count = 1
while count <= n:
yield count
count += 1
for number in count_up_to(5):
print(number)
Этот код выводит числа от 1 до 5 и не использует лишнюю память.