As a result of the comments in my answer on this thread, I wanted to know what the speed difference is between the
def method1(): out_str = '' for num in xrange(loop_count): out_str += `num` return out_str
def method4(): str_list =  for num in xrange(loop_count): str_list.append(`num`) return ''.join(str_list)
Now I realise they are not strictly representative, and the 4th method appends to a list before iterating through and joining each item, but it's a fair indication.
String join is significantly faster then concatenation.
Why? Strings are immutable and can't be changed in place. To alter one, a new representation needs to be created (a concatenation of the two).