Eu estava apenas testando a velocidade de diferentes métodos de concatenação / substituição de strings por curiosidade. Uma pesquisa no google sobre o assunto me trouxe aqui. Pensei em postar os resultados do meu teste na esperança de que ajudasse alguém a decidir.
import timeit
def percent_():
return "test %s, with number %s" % (1,2)
def format_():
return "test {}, with number {}".format(1,2)
def format2_():
return "test {1}, with number {0}".format(2,1)
def concat_():
return "test " + str(1) + ", with number " + str(2)
def dotimers(func_list):
# runs a single test for all functions in the list
for func in func_list:
tmr = timeit.Timer(func)
res = tmr.timeit()
print "test " + func.func_name + ": " + str(res)
def runtests(func_list, runs=5):
# runs multiple tests for all functions in the list
for i in range(runs):
print "----------- TEST #" + str(i + 1)
dotimers(func_list)
... Depois de executar runtests((percent_, format_, format2_, concat_), runs=5)
, descobri que o método% era cerca de duas vezes mais rápido que os outros nessas pequenas strings. O método concat sempre foi o mais lento (quase imperceptível). Havia diferenças muito pequenas ao alternar as posições no format()
método, mas alternar as posições sempre foi pelo menos 0,01 mais lento do que o método de formato regular.
Amostra de resultados de teste:
test concat_() : 0.62 (0.61 to 0.63)
test format_() : 0.56 (consistently 0.56)
test format2_() : 0.58 (0.57 to 0.59)
test percent_() : 0.34 (0.33 to 0.35)
Eu os executei porque uso concatenação de string em meus scripts e queria saber qual era o custo. Eu os executei em ordens diferentes para ter certeza de que nada estava interferindo ou obtendo um melhor desempenho sendo o primeiro ou o último. Em uma nota lateral, eu adicionei alguns geradores de string mais longos para funções como "%s" + ("a" * 1024)
concat regular e foi quase 3 vezes mais rápido (1,1 vs 2,8) do que usar os métodos format
e %
. Acho que depende das cordas e do que você está tentando alcançar. Se o desempenho realmente importa, talvez seja melhor tentar coisas diferentes e testá-las. Eu tendo a escolher a legibilidade ao invés da velocidade, a menos que a velocidade se torne um problema, mas isso sou só eu. ASSIM não gostei do meu copiar / colar, eu tive que colocar 8 espaços em tudo para que ficasse certo. Eu geralmente uso 4.