Duncan Booth <duncan.bo...@invalid.invalid> writes: > Duncan Booth <duncan.bo...@invalid.invalid> wrote: > >> John Posner <jjpos...@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 -- http://mail.python.org/mailman/listinfo/python-list