[Python-Dev] genexps slow?

Tim Peters tim.one at comcast.net
Wed Mar 31 00:51:20 EST 2004


[Guido]
> Can anybody explain this?
>
> [guido at guido linux]$ ./python ../Lib/timeit.py -s 'r=range(10000)'
                      'sum([x for x in r])'
> 100 loops, best of 3: 7.75 msec per loop
> [guido at guido linux]$ ./python ../Lib/timeit.py -s 'r=range(10000)'
                      'sum(x for x in r)'
> 100 loops, best of 3: 8.23 msec per loop
>
> (I believe this is with the penultimate version of the patch from SF.)

Does a sub-10% difference really need explanation?  Resuming a generator
function is a lot cheaper than calling a function, but there's still a
non-trivial amount of code to get in and out of eval_frame() each time,
which the listcomp version gets to skip.  Make r a lot bigger, and I expect
the genexp will get relatively faster (due to better cache behavior).
Timing plain 'sum(r)' would also be revealing (of something <wink>).




More information about the Python-Dev mailing list