Stavo solo testando la velocità di diversi metodi di concatenazione / sostituzione di stringhe per curiosità. Una ricerca su Google sull'argomento mi ha portato qui. Ho pensato di pubblicare i risultati dei miei test nella speranza che potesse aiutare qualcuno a decidere.
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)
... Dopo la corsa runtests((percent_, format_, format2_, concat_), runs=5)
, ho scoperto che il metodo% era circa il doppio più veloce degli altri su queste corde piccole. Il metodo concatenato era sempre il più lento (a malapena). C'erano differenze format()
minime quando si cambiavano le posizioni nel metodo, ma il cambio di posizione era sempre almeno 0,01 più lento del normale metodo di formattazione.
Campione dei risultati del test:
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)
Li ho eseguiti perché utilizzo la concatenazione di stringhe nei miei script e mi chiedevo quale fosse il costo. Li ho eseguiti in ordini diversi per assicurarmi che nulla interferisse o che ottenesse prestazioni migliori essendo il primo o l'ultimo. Come nota a margine, ho inserito alcuni generatori di stringhe più lunghi in quelle funzioni come "%s" + ("a" * 1024)
e il normale concatenamento era quasi 3 volte più veloce (1.1 vs 2.8) rispetto all'utilizzo dei metodi format
e %
. Immagino che dipenda dalle corde e da cosa stai cercando di ottenere. Se le prestazioni sono davvero importanti, potrebbe essere meglio provare cose diverse e testarle. Tendo a scegliere la leggibilità rispetto alla velocità, a meno che la velocità non diventi un problema, ma sono solo io. Quindi non mi è piaciuto il mio copia / incolla, ho dovuto mettere 8 spazi su tutto per farlo sembrare giusto. Di solito uso 4.