Um antipadrão comum em Python é concatenar uma sequência de strings usando +um loop. Isso é ruim porque o intérprete Python precisa criar um novo objeto de seqüência de caracteres para cada iteração e acaba levando tempo quadrático. (Versões recentes do CPython aparentemente podem otimizar isso em alguns casos, mas outras implementações não podem, então os programadores são desencorajados a confiar nisso.) ''.joinÉ o caminho certo para fazer isso.
No entanto, eu ouvi dizer ( incluindo aqui no Stack Overflow ) que você nunca deve usar +para concatenação de strings, mas sempre usar ''.joinou uma string de formato. Não entendo por que esse é o caso se você está apenas concatenando duas strings. Se meu entendimento está correto, não deve levar tempo quadrático, e acho que a + bé mais limpo e mais legível que um ''.join((a, b))ou outro '%s%s' % (a, b).
É uma boa prática usar +para concatenar duas seqüências de caracteres? Ou existe um problema que não conheço?
+é mais rápido ou mais lento? E porque?
In [2]: %timeit "a"*80 + "b"*80 1000000 loops, best of 3: 356 ns per loop In [3]: %timeit "%s%s" % ("a"*80, "b"*80) 1000000 loops, best of 3: 907 ns per loop
In [3]: %timeit "%s%s" % (a, b) 1000000 loops, best of 3: 590 ns per loop In [4]: %timeit a + b 10000000 loops, best of 3: 147 ns per loop
__str__. Veja minha resposta para exemplos.