Je testais juste la vitesse de différentes méthodes de concaténation / substitution de chaînes par curiosité. Une recherche google sur le sujet m'a amené ici. J'ai pensé publier les résultats de mes tests dans l'espoir que cela aiderait quelqu'un à décider.
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)
... Après avoir exécuté runtests((percent_, format_, format2_, concat_), runs=5)
, j'ai trouvé que la méthode% était environ deux fois plus rapide que les autres sur ces petites chaînes. La méthode concat était toujours la plus lente (à peine). Il y avait de très petites différences lors du changement de position dans la format()
méthode, mais le changement de position était toujours au moins 0,01 plus lent que la méthode de format normal.
Échantillon de résultats de 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)
Je les ai exécutés parce que j'utilise la concaténation de chaînes dans mes scripts, et je me demandais quel en était le coût. Je les ai exécutés dans des ordres différents pour m'assurer que rien n'interférait, ou obtenir de meilleures performances en premier ou en dernier. D'un autre côté, j'ai "%s" + ("a" * 1024)
ajouté des générateurs de chaînes plus longues dans ces fonctions comme et le concat régulier était presque 3 fois plus rapide (1,1 contre 2,8) que l'utilisation des méthodes format
et %
. Je suppose que cela dépend des cordes et de ce que vous essayez de réaliser. Si les performances comptent vraiment, il vaudrait peut-être mieux essayer différentes choses et les tester. J'ai tendance à choisir la lisibilité plutôt que la vitesse, à moins que la vitesse ne devienne un problème, mais ce n'est que moi. Donc, je n'ai pas aimé mon copier / coller, j'ai dû mettre 8 espaces sur tout pour que tout soit correct. J'utilise habituellement 4.