Python speed-up
Bengt Richter
bokr at oz.net
Wed Sep 22 16:34:21 EDT 2004
More information about the Python-list mailing list
Wed Sep 22 16:34:21 EDT 2004
- Previous message (by thread): Python speed-up
- Next message (by thread): Python speed-up
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Wed, 22 Sep 2004 21:39:25 +0200, Gerrit <gerrit at nl.linux.org> wrote: >Alex Martelli wrote: >> Putting together a big string with a loop of 'bigstring+=piece' is >> perhaps the best-known performance trap in Python. Python 2.4 has >> turned somersaults to lessen the penalty you pay for this, but it's >> still pretty slow compared to "accumulate pieces in a list, ''.join the >> list when it's done". There's really nothing better than this _in >> general_. > >Why isn't cStringIO faster than concatenating strings? You are timing extra overheads besides the actual concatenation of the data, I beleive. > >Using python2.4: > >$ python timeit.py -s 'from cStringIO import StringIO; s=StringIO()' "s.write('foo')" >1000000 loops, best of 3: 0.555 usec per loop It should improve a little if you hoist out the s.write attribute lookup handicap from the loop, e.g., with swrite = s.write and then use swrite('foo') but you are still timing a function call in the mix. > >$ python timeit.py -s 's=""' "s+='foo'" >1000000 loops, best of 3: 0.383 usec per loop It should slow down a bit if you give it the same function-call handicap as swrite one way or another. > >$ python timeit.py -s 'L=[]' "L.append('foo')" >1000000 loops, best of 3: 0.32 usec per loop > >$ python timeit.py -s 'from StringIO import StringIO; s=StringIO()' "s.write('foo')" >100000 loops, best of 3: 3.19 usec per loop > >I was about to advise cStringIO as being much faster than concatenating >strings, but just before I was about to send the e-mail, I spied with my >little eye that the numbers were swapped - concatenating strings is >actually *faster* than using cStringIO! What's happening? > Apples vs oranges, partly, and Skip mentions s+='xxx' optimization for 2.4. Regards, Bengt Richter
- Previous message (by thread): Python speed-up
- Next message (by thread): Python speed-up
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list