Я просто перевіряв швидкість різних методів конкатенації / заміщення рядків з цікавості. Гугл-пошук на цю тему привів мене сюди. Я думав, що опублікую свої результати тесту в надії, що це може допомогти комусь прийняти рішення.
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()
методі, але перемикання позицій завжди було щонайменше .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)
звичайний конмат був майже в 3 рази швидшим (1,1 проти 2,8), ніж за допомогою методів format
та %
. Я думаю, це залежить від рядків і того, що ви намагаєтесь досягти. Якщо продуктивність дійсно має значення, можливо, краще спробувати різні речі та перевірити їх. Я схильний вибирати читабельність над швидкістю, якщо швидкість не стане проблемою, але це тільки я. Так мені не сподобалася моя копія / вставка, мені довелося поставити 8 пробілів на все, щоб воно виглядало правильно. Я зазвичай використовую 4.