building strings from variables
MonkeeSage
MonkeeSage at gmail.com
Thu Oct 5 21:42:37 EDT 2006
wesley chun wrote:
> from the performance standpoint, i believe that #4 (list join) from
> scott is the fastest. #1 (string formatting) is next preferred only
> because #3 (string concat) is the worst [think "realloc()"]. #2 is
> useful for when you have users who aren't as comfortable with #1.
I might have done something wrong here, but it looks like the %
operator would be the fastest (negligibly). And string.Template is
horribly slow(!).
import os, sys, string, timeit
hl = [['working_dir', os.getcwd()],
['ssh_cmd' , 'ssh'],
['some_count' , 5],
['some_param1', 'cheese'],
['some_param2', 'burger']]
hd = dict(hl)
ht = tuple(map(lambda x: x[1], hl))
sys.modules['__main__'].__dict__.update(hd)
def make_string_fmt():
out = "cd %s ; %s %d %s %s" % ht
def make_string_cat():
out = "cd "+working_dir+" ; "+ssh_cmd+" "+str(some_count)+" "+\
some_param1+" "+some_param2
def make_string_lst():
out = ' '.join(["cd", working_dir, ";", ssh_cmd,
str(some_count), some_param1, some_param2])
def make_string_tmp():
out = string.Template("cd $working_dir ; $ssh_cmd"
"$some_count $some_param1 $some_param2")\
.substitute(hd)
print "String formatting time:"
print timeit.Timer("make_string_fmt()",
"from __main__ import make_string_fmt").timeit()
print "String concatination time:"
print timeit.Timer("make_string_cat()",
"from __main__ import make_string_cat").timeit()
print "List join time:"
print timeit.Timer("make_string_lst()",
"from __main__ import make_string_lst").timeit()
print "Template substitution time:"
print timeit.Timer("make_string_tmp()",
"from __main__ import make_string_tmp").timeit()
========
Output:
String formatting time:
4.62050509453
String concatination time:
5.90371489525
List join time:
6.72425699234
Template substitution time:
66.4205350876
Regards,
Jordan
More information about the Python-list
mailing list