When you do something like this:
for i in range(5):
print i
What does Python do? Does it first generate an array with [0,1,2,3,4] and then goes over each item printing it?
Similar to:
for i in [0,1,2,3,4]:
print i
Or does it print each number as it generates them? Something like:
Generate 0 assign 0 to i print i
Generate 1 -> assign 1 to i -> print i
Generate 2 -> assign 2 to i -> print i
Generate 3 -> assign 3 to i -> print i
Generate 4 -> assign 4 to i -> print i
Update
I have added the tag for Python 2.7. I didn't think my question was version specific, but it seems it is!
Right now I am working with Python 2.7 so my question refers to that. But I find very valuable the information comparing Python 2 range against Python 3 range.
Answer
In Python 2, range()
returns the whole list object then that list
object is iterated by for
.
In Python 3, it returns a memory efficient iterable, which is an
object of its own with dedicated logic and methods, not a list. Nowfor
will get each value as it is generated by that iterable.
In Python 2 there is xrange()
to get something like what Python 3'srange()
do. Python 2's xrange is kind of halfway between Python 2's
range and Python 3's range. It's better than the former but not as
good as the latter.
Finally, in Python 3, if you want the whole list do:
>>> list(range(...))
No comments:
Post a Comment