Generators/iterators, Pythonicity, and primes

Duncan Booth duncan.booth at invalid.invalid
Sun Apr 12 23:04:21 CEST 2009


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.



More information about the Python-list mailing list