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 -- http://mail.python.org/mailman/listinfo/python-list