Steve R. Hastings wrote: > When you compile the expression > > for i in range(1000): > pass > > does Python make an iterator for range(), and then generate the values > on the fly? Or does Python actually allocate the list [0, 1, 2, ..., 999] > and then step through it?
It does. > I was under the impression that recent releases of Python optimize this > case, but upon reflection, I have no idea where I got that impression. > > If Python actually allocates the list, then clearly we should all use > "for i in xrange". But "for i in range" looks cleaner, and is potentially > more lightweight than xrange. Of course, if you want to write code that > runs well on older versions of Python, you need to use xrange(). > > > If Python doesn't currently optimize this case, is there any chance this > optimization could be added? As the alternative is so easy (adding a single character), I think this will not make it into the 2.x line. A patch for the old compiler existed on SF, but it will not work with the new AST compiler. > P.S. It looks like all the cool people look at the generated bytecodes to > answer questions like this one. I want to be cool too. Where can I find > information about how to get a bytecodes listing for my compiled Python? The "dis" module. Georg -- http://mail.python.org/mailman/listinfo/python-list