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 ''.join
ou 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.