Сначала предлагаю сравнить следующие две строчки кода:
a = [i for i in range(5)]x = (i for i in range(5))Единственная разница в этих двух записях – скобки; в первой строчки они квадратные, а во второй – круглые. Сообщу заранее, что значением переменной
a является список, а переменная x хранит в себе генератор.Можем в этом убедиться, распечатав обе переменные:
print(a)print(x)# [0, 1, 2, 3, 4]# <generator object <genexpr> at 0x1079d4050>В первом варианте всё должно быть более менее понятно, а если нет, то рекомендую прочитать пост про генераторы коллекций.
Переменная
x, как уже выяснилось, хранит в себе по сути самый обычный генератор. Про генераторы на канале также был отдельный пост. Можем получить его значения с помощью цикла:for i in x: print(i, end=' ')# 0 1 2 3 4Но вот возникает вопрос, а что использовать то? Здесь всё тоже достаточно просто.
Если вам нужен результат в виде списка прямо сейчас для дальнейшего выполнения программы, то используйте генераторные выражения. А если же значения понадобятся еще не скоро или вообще неизвестно, понадобится ли они вообще, то предпочтительнее генераторы, чтобы не занимать лишнюю память и не нагружать систему.