todddeluca
Re:Python Patterns: An Optimization Anecdote
on Monday December 19, 2011 @11:05AM (#3370001)
Here are performance numbers for a variety of approaches using a list of length 256. You can see that having a local reference to the global chr function (as discussed in the article) can give a slight speed boost. Using join() in conjunction with map() performs fairly well.
python -m timeit -s 'l = range(256);' '"".join([chr(i) for i in l])'
# 10000 loops, best of 3: 80.5 usec per loop
python -m timeit -s 'l = range(256); lchr = chr' '"".join([lchr(i) for i in l])'
# 10000 loops, best of 3: 75 usec per loop
python -m timeit -s 'import itertools; l = range(256); lchr = chr' '"".join(itertools.imap(chr, l))'
# 10000 loops, best of 3: 52.8 usec per loop
python -m timeit -s 'l = range(256); lchr = chr' '"".join(map(chr, l))'
# 10000 loops, best of 3: 48.9 usec per loop
python -m timeit -s 'l = range(256); lchr = chr' '"".join(lchr(i) for i in l)'
# 10000 loops, best of 3: 87.2 usec per loop
python -m timeit -s 'l = range(256); lchr = chr' '
s = ""
for i in l:
s += lchr(i)
'
# 10000 loops, best of 3: 64.2 usec per loop
Re:Python Patterns: An Optimization Anecdote
on Monday December 19, 2011 @10:51AM (#3369956)
To avoid confusing newbies, str() does not concatenate a list (or generator, etc.) of strings into a single string. You probably meant to call ''.join() instead.
>>> import itertools
>>> def f2_1(list):
... return str(itertools.imap(chr, list))
...
>>> f2_1(range(10))
'<itertools.imap object at 0x10048e850>'
>>> def f2_2(list):
... return str(chr(c) for c in list)
...
>>> f2_2(range(10))
'<generator object <genexpr> at 0x10046b780>'