Generators/iterators, Pythonicity, and primes
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