Właśnie testowałem szybkość różnych metod łączenia / zastępowania ciągów z ciekawości. Wyszukiwarka google na ten temat przywiodła mnie tutaj. Pomyślałem, że opublikuję wyniki moich testów w nadziei, że to pomoże komuś zdecydować.
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)
... Po uruchomieniu runtests((percent_, format_, format2_, concat_), runs=5)
zauważyłem, że metoda% była około dwa razy szybsza niż inne na tych małych strunach. Metoda concat była zawsze najwolniejsza (ledwo). Wystąpiły bardzo drobne różnice podczas zmiany pozycji w format()
metodzie, ale zmiana pozycji była zawsze co najmniej 0,01 wolniejsza niż w przypadku metody standardowego formatu.
Przykładowe wyniki badań:
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)
Uruchomiłem je, ponieważ używam konkatenacji ciągów w moich skryptach i zastanawiałem się, jaki jest koszt. Uruchomiłem je w różnych kolejności, aby upewnić się, że nic nie przeszkadza lub uzyskuje lepszą wydajność jako pierwszy lub ostatni. Na marginesie, do tych funkcji "%s" + ("a" * 1024)
dodałem kilka dłuższych generatorów ciągów, a zwykłe konkatowanie było prawie 3 razy szybsze (1,1 vs 2,8) niż przy użyciu metod format
i %
. Myślę, że to zależy od strun i tego, co próbujesz osiągnąć. Jeśli wydajność naprawdę ma znaczenie, lepiej spróbować różnych rzeczy i je przetestować. Zwykle przedkładam czytelność zamiast szybkości, chyba że szybkość stanie się problemem, ale to tylko ja. Więc nie podobało mi się moje kopiowanie / wklejanie, musiałem umieścić 8 spacji na wszystkim, aby wyglądało dobrze. Zwykle używam 4.