range()
: range(1, 10)
возвращает список от 1 до 10 номеров и сохраняет весь список в памяти.
xrange()
: Как и range()
, но вместо возврата списка возвращает объект, который генерирует числа в диапазоне по требованию. Для циклов это немного быстрее, чем range()
и более эффективно использует память. xrange()
объект похож на итератор и генерирует числа по требованию (Lazy Evaluation).
In [1]: range(1,10)
Out[1]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
In [2]: xrange(10)
Out[2]: xrange(10)
In [3]: print xrange.__doc__
Out[3]: xrange([start,] stop[, step]) -> xrange object
range()
делает то же самое, что xrange()
, используемый в Python 3, и в Python 3 нет термина xrange()
.
range()
на самом деле может быть быстрее в некотором сценарии, если вы повторяете одну и ту же последовательность несколько раз. xrange()
должен каждый раз восстанавливать целочисленный объект, но range()
будет иметь реальные целочисленные объекты.