Я просто из любопытства тестировал скорость различных методов конкатенации / подстановки строк. Поиск в Google по этой теме привел меня сюда. Я думал, что опубликую результаты своих тестов в надежде, что они помогут кому-нибудь принять решение.
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)
... После запуска runtests((percent_, format_, format2_, concat_), runs=5)
я обнаружил, что метод% примерно в два раза быстрее других на этих маленьких строках. Метод concat всегда был самым медленным (едва ли). Были очень крошечные различия при переключении позиций вformat()
методе , но переключение позиций всегда было как минимум на 0,01 медленнее, чем метод обычного формата.
Пример результатов тестирования:
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)
Я запустил их, потому что я использую конкатенацию строк в своих скриптах, и мне было интересно, сколько это стоит. Я запускал их в разном порядке, чтобы убедиться, что ничто не мешает и не улучшает производительность в первую или в последнюю очередь. На стороне записки, я бросил в некоторых длинных строковых генераторах в эти функции , как "%s" + ("a" * 1024)
и регулярный CONCAT был почти в 3 раза быстрее (1,1 против 2,8) , как с использованием format
и %
методов. Думаю, это зависит от струн и от того, чего вы пытаетесь достичь. Если производительность действительно имеет значение, возможно, лучше попробовать разные вещи и протестировать их. Я предпочитаю удобочитаемость скорости, если только скорость не становится проблемой, но это только я. ТАК не понравилась моя копия / вставка, мне пришлось поставить 8 пробелов, чтобы все выглядело правильно. Я обычно использую 4.