efficiency of range() and xrange() in for loops

Georg Brandl g.brandl-nospam at gmx.net
Wed Apr 5 18:59:01 EDT 2006


Alan Morgan wrote:
> In article <teXYf.69673$A83.1673324 at twister1.libero.it>,
> Giovanni Bajo <noway at sorry.com> wrote:
>>Steve R. Hastings wrote:
>>
>>>> in Python 2.X, range is defined to return a list.  if you start
>>>> returning something else, you'll break stuff.
>>>
>>> Perhaps I'm mistaken here, but I don't see how this optimization could
>>> possibly break anything.
>>
>>Because you assume that the only use-case of range() is within a for-loop.
>>range() is a builtin function that can be used in any Python expression. For
>>instance:
>>
>>RED, GREEN, BLUE, WHITE, BLACK = range(5)
> 
> Hmmm, this worked fine when I used xrange as well.  Am I missing something?
> Obviously there *are* differences, viz:

Just _look_ at the objects:

>>> range(5)
[0, 1, 2, 3, 4]
>>> xrange(5)
xrange(5)
>>>

range is giving you a real list, while xrange is giving you an xrange object.
Have you tried to slice an xrange object? Or using .append on it?

Georg



More information about the Python-list mailing list