Why or why not?
range()
: range(1, 10)
returns a list from 1 to 10 numbers & hold whole list in memory.xrange()
: Like range()
, but instead of returning a list, returns an object that generates the numbers in the range on demand. For looping, this is lightly faster than range()
and more memory efficient. xrange()
object like an iterator and generates the numbers on demand (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()
does the same thing as xrange()
used to do in Python 3 and there is not term xrange()
exist in Python 3.
range()
can actually be faster in some scenario if you iterating over the same sequence multiple times. xrange()
has to reconstruct the integer object every time, but range()
will have real integer objects.