Generators/iterators, Pythonicity, and primes

Arnaud Delobelle arnodel at googlemail.com
Mon Apr 13 08:39:31 CEST 2009


Duncan Booth <duncan.booth at invalid.invalid> writes:

> Duncan Booth <duncan.booth at invalid.invalid> wrote:
>
>> John Posner <jjposner at snet.net> wrote:
>> 
>>> Do know what in the itertools implementation causes adding a 'if p <=
>>> sqrt(n)' clause to *decrease* performance, while adding a
>>> 'takewhile()' clause *increases* performance? 
>> 
>> I haven't timed it, but I would guess that the takewhile was faster 
>> only because the sqrt(n) had been factored out of the loop. Try the 
>> original loop again precalculating the sqrt(n) and see how that compares.
>> 
> Which of course is rubbish, extracting the sdqrt will have an effect but 
> the main factor is that takewhile exits the loop as soon as the condition 
> is false whereas a conditional in a generator comprehension doesn't stop 
> the loop continuing to the end.

Absolutely!  Since you hadn't quoted the original code, I'd forgotten
that it wasn't stopping after n**0.5.

-- 
Arnaud



More information about the Python-list mailing list