Sadece meraktan farklı dizgi birleştirme / ikame yöntemlerinin hızını test ediyordum. Konuyla ilgili bir google araması beni buraya getirdi. Birisinin karar vermesine yardımcı olabileceği umuduyla test sonuçlarımı yayınlayacağımı düşündüm.
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)
... Çalıştırdıktan sonra runtests((percent_, format_, format2_, concat_), runs=5)
, bu küçük dizelerde% yönteminin diğerlerine göre yaklaşık iki kat daha hızlı olduğunu buldum. Concat yöntemi her zaman en yavaş olanıydı (zar zor). Konumları değiştirirken çok küçük farklılıklar vardı.format()
Yöntemdeki , ancak konum değiştirme her zaman normal biçim yönteminden en az 0,01 daha yavaştı.
Test sonuçları örneği:
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)
Bunları çalıştırdım çünkü komut dosyalarımda dize birleştirme kullanıyorum ve maliyetin ne olduğunu merak ediyordum. Hiçbir şeyin müdahale etmediğinden veya ilk veya son olarak daha iyi performans elde ettiğinden emin olmak için onları farklı sıralarla çalıştırdım. Bir yan not olarak, bazı daha uzun dizgi oluşturucuları gibi bu işlevlere "%s" + ("a" * 1024)
ekledim ve normal concat, format
ve %
yöntemlerini kullanmaktan neredeyse 3 kat daha hızlıydı (1.1'e karşı 2.8) . Sanırım dizelere ve neyi başarmaya çalıştığınıza bağlı. Performans gerçekten önemliyse, farklı şeyler denemek ve onları test etmek daha iyi olabilir. Okunabilirliği hıza tercih etme eğilimindeyim, eğer hız bir sorun haline gelmedikçe, ama bu sadece benim. Yani kopyala / yapıştırımı beğenmedim, doğru görünmesi için her şeye 8 boşluk koymak zorunda kaldım. Genelde 4 kullanıyorum.