[Python-Dev] A `cogen' module [was: Re: PEP 218 (sets); moving set.py to Lib]

Guido van Rossum guido@python.org
Wed, 28 Aug 2002 10:27:30 -0400

> Special-casing the 2 argument case helps a lot. It brings the performace
> within 50% of nested loops which means that if you actually do something
> inside the loop the overhead is quite negligible.

Hm, I tried that and found no difference.  Maybe I didn't benchmark right.

> Ahh... re-iterability again...
> This is a good example of a function that *fails silently* for non 
> re-iterable arguments.

This failure is hardly silent IMO: the results are totally bogus,
which is a pretty good clue that something's wrong.

> Slurping the tail into a list loses the lazy efficiency of this function. 
> One of the ways I've used this function is to scan combinations until a 
> condition is satisfied. The iteration is always terminated before reaching 
> the end. Reading ahead may waste computation and memory.

I don't understand.  The Cartesian product calculation has to iterate
over the second argument many times (unless you have it iterate over
the first argument many times).  So a lazy argument won't work.  Am I
missing something?

> All I want is something that will raise an exception if any argument but 
> the first is not re-iterable (e.g. my reiter() proposal). I'll add list()
> to the argument myself if I really want to. Don't try to guess what I
> meant.

Actually, I don't want to reiterate this debate.

--Guido van Rossum (home page: http://www.python.org/~guido/)