matter of style and performance question with string cat'ing

Robert Roy rjroy at takingcontrol.com
Mon May 7 21:45:25 EDT 2001


On Mon, 7 May 2001 20:27:09 -0400, "Tim Peters" <tim.one at home.com>
wrote:

>[Sean 'Shaleh' Perry]
>> I find that I prefer the style:
>>
>> s = '%s is %s' % (foo,bar)
>>
>> as opposed to:
>>
>> s = foo + ' is ' + bar
>>
>> however, which is more efficient?
>
>Time it, and especially with len(foo) and len(bar) varying over a wide range.
>
>> Usually this does not matter, but I am curious.
>
>Apparently not enough to call time.clock() <wink>.  Throw in
>
>   ' is '.join((foo, bar))
>
>too, while you're at it.
>
>

You're such a taskmaster. Some timings and some really contrived test
code.


1000 repetitions
foo is 3000 chars
bar is 7500 chars

foo + ' is ' + bar
0.0363151672362
'%s is %s' % (foo, bar)
0.0446533534532
' is '.join((foo, bar))
0.032099987529


longer tuples (5 x bar)
foo + ' is ' + bar
1.8868694211
'%s is %s' % (foo, bar)
0.14393043424
' is '.join((foo, bar))
0.101843972763


longer tuples (10 x bar)
foo + ' is ' + bar
10.8883127129
'%s is %s' % (foo, bar)
4.57367171077
' is '.join((foo, bar))
1.13380711346


longer tuples (20 x bar)
foo + ' is ' + bar
47.0483327987
'%s is %s' % (foo, bar)
24.9879528945
' is '.join((foo, bar))
2.20609211583

########

import time

foo = 'foo' * 1000
bar = 'bar' * 2500
reps = 1000
replist = range(reps)

print reps, "repetitions"
print 'foo is %s chars' % len(foo)
print 'bar is %s chars' % len(bar)
print

s = time.clock()
for x in replist:
    spam = foo + ' is ' + bar
e = time.clock()
print "foo + ' is ' + bar"
print e - s
 
s = time.clock()
for x in replist:
    spam = '%s is %s' % (foo, bar)
e = time.clock()
print "'%s is %s' % (foo, bar)"
print e - s
 
s = time.clock()
for x in replist:
    spam = ' is '.join((foo, bar))
e = time.clock()
print "' is '.join((foo, bar))"
print e - s

print
print
print 'longer tuples (5 x bar)'
s = time.clock()
for x in replist:
    spam = foo + ' is ' + bar+ ' is ' + bar+ ' is ' + bar+ ' is ' +
bar+ ' is ' + bar
e = time.clock()
print "foo + ' is ' + bar"
print e - s
 
s = time.clock()
for x in replist:
    spam = '%s is %s is %s is %s is %s is %s' % (foo, bar, bar, bar,
bar, bar)
e = time.clock()
print "'%s is %s' % (foo, bar)"
print e - s
 
s = time.clock()
for x in replist:
    spam = ' is '.join((foo, bar, bar, bar, bar, bar))
e = time.clock()
print "' is '.join((foo, bar))"
print e - s



 
print
print
print 'longer tuples (10 x bar)'
s = time.clock()
for x in replist:
    spam = foo + ' is ' + bar+ ' is ' + bar+ ' is ' + bar+ ' is ' +
bar+ ' is ' + bar+ ' is ' + bar+ ' is ' + bar+ ' is ' + bar+ ' is ' +
bar+ ' is ' + bar
e = time.clock()
print "foo + ' is ' + bar"
print e - s
 
s = time.clock()
for x in replist:
    spam = '%s is %s is %s is %s is %s is %s is %s is %s is %s is %s
is %s' % (foo, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar)
e = time.clock()
print "'%s is %s' % (foo, bar)"
print e - s
 
s = time.clock()
for x in replist:
    spam = ' is '.join((foo, bar, bar, bar, bar, bar, bar, bar, bar,
bar, bar))
e = time.clock()
print "' is '.join((foo, bar))"
print e - s


print
print
print 'longer tuples (20 x bar)'
s = time.clock()
for x in replist:
    spam = foo + ' is ' + bar+ ' is ' + bar+ ' is ' + bar+ ' is ' +
bar+ ' is ' + bar+ ' is ' + bar+ ' is ' + bar+ ' is ' + bar+ ' is ' +
bar+ ' is ' + bar + bar+ ' is ' + bar+ ' is ' + bar+ ' is ' + bar+ '
is ' + bar+ ' is ' + bar+ ' is ' + bar+ ' is ' + bar+ ' is ' + bar+ '
is ' + bar
e = time.clock()
print "foo + ' is ' + bar"
print e - s
 
s = time.clock()
for x in replist:
    spam = '%s is %s is %s is %s is %s is %s is %s is %s is %s is %s
is %s is %s is %s is %s is %s is %s is %s is %s is %s is %s is %s' %
(foo, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar,
bar, bar, bar, bar, bar, bar, bar)
e = time.clock()
print "'%s is %s' % (foo, bar)"
print e - s
 
s = time.clock()
for x in replist:
    spam = ' is '.join((foo, bar, bar, bar, bar, bar, bar, bar, bar,
bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar))
e = time.clock()
print "' is '.join((foo, bar))"
print e - s






More information about the Python-list mailing list