Ich habe nur aus Neugier die Geschwindigkeit verschiedener Methoden zur Verkettung / Ersetzung von Zeichenfolgen getestet. Eine Google-Suche zu diesem Thema hat mich hierher gebracht. Ich dachte, ich würde meine Testergebnisse veröffentlichen, in der Hoffnung, dass es jemandem bei der Entscheidung helfen könnte.
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)
... Nach dem Ausführen runtests((percent_, format_, format2_, concat_), runs=5)
stellte ich fest, dass die% -Methode auf diesen kleinen Zeichenfolgen etwa doppelt so schnell war wie die anderen. Die Concat-Methode war immer die langsamste (kaum). Es gab sehr kleine Unterschiede beim Wechseln der Positionen in der format()
Methode, aber das Wechseln der Positionen war immer mindestens 0,01 langsamer als bei der regulären Formatmethode.
Stichprobe der Testergebnisse:
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)
Ich habe diese ausgeführt, weil ich in meinen Skripten die Verkettung von Zeichenfolgen verwende, und ich habe mich gefragt, wie hoch die Kosten waren. Ich habe sie in verschiedenen Reihenfolgen ausgeführt, um sicherzustellen, dass nichts stört oder dass eine bessere Leistung als erste oder letzte erzielt wird. "%s" + ("a" * 1024)
Nebenbei bemerkt, ich habe einige längere String-Generatoren in diese Funktionen wie und reguläres Concat war fast dreimal so schnell (1.1 vs 2.8) wie mit den Methoden format
und %
. Ich denke, es hängt von den Saiten ab und davon, was Sie erreichen wollen. Wenn die Leistung wirklich wichtig ist, ist es möglicherweise besser, verschiedene Dinge auszuprobieren und zu testen. Ich neige dazu, die Lesbarkeit der Geschwindigkeit vorzuziehen, es sei denn, die Geschwindigkeit wird zum Problem, aber das bin nur ich. Also mochte ich mein Kopieren / Einfügen nicht, ich musste 8 Leerzeichen auf alles setzen, damit es richtig aussah. Ich benutze normalerweise 4.