[Python-Dev] Par-for/range

Thomas Wouters thomas@xs4all.net
Wed, 12 Jul 2000 23:19:42 +0200


On Wed, Jul 12, 2000 at 01:10:56PM -0500, Paul Prescod wrote:
> Thomas Wouters wrote:

> > For that reason I think it's better to live with xrange() ;)

> If we had first class range syntax then it would be relatively easy to
> recognize the pattern
> 
> for i in [x:y:z]:
> 	....
> 
> Then we could generate a special FOR_INTS bytecode. I've heard that "C"
> has a pretty efficient implementation of that construct. <wink>

Yes. This was one of the reasons Guido was interested in this. (We talked
about this in private email before I implemented it ;)

> Plus, if your loops are so large that they need xrange, you would
> probably get an interesting speedup from using a real C for-loop instead
> of an object! I mean for small values xrange is slower than range and
> when you think about what range is doing under the covers. <shudder>

Well, with the new 'sq_contains' PySequenceMethods member, the operation:

number in xrange(19,23578294,3)*393 # for instance ;)

also gets very efficient. A *lot* more efficient than using the equivalent
[ra::ge] syntax in any case. That would be one reason to add at least a
'BUILD_XRANGE' bytecode, so when the compiler is made sufficiently
intelligent, it could issue 'BUILD_XRANGE' opcodes instead of BUILD_RANGE
opcodes for

if x in [:y:z]:

and other instances where the resulting list isn't stored anywhere, so will
never be modified. 

-- 
Thomas Wouters <thomas@xs4all.net>

Hi! I'm a .signature virus! copy me into your .signature file to help me spread!