Saya baru saja menguji kecepatan metode penggabungan / substitusi string yang berbeda karena penasaran. Pencarian google tentang subjek membawa saya ke sini. Saya pikir saya akan memposting hasil tes saya dengan harapan dapat membantu seseorang memutuskan.
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)
... Setelah berjalan runtests((percent_, format_, format2_, concat_), runs=5)
, saya menemukan bahwa% metode sekitar dua kali lebih cepat dari yang lain pada string kecil ini. Metode concat selalu yang paling lambat (hampir tidak). Ada perbedaan yang sangat kecil saat mengganti posisi dalam format()
metode ini, tetapi posisi peralihan selalu setidaknya 0,01 lebih lambat daripada metode format biasa.
Contoh hasil tes:
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)
Saya menjalankan ini karena saya menggunakan rangkaian string dalam skrip saya, dan saya bertanya-tanya berapa biayanya. Saya menjalankannya dalam urutan berbeda untuk memastikan tidak ada yang mengganggu, atau mendapatkan kinerja yang lebih baik menjadi yang pertama atau terakhir. Di samping catatan, saya memasukkan beberapa generator string yang lebih panjang ke dalam fungsi-fungsi seperti "%s" + ("a" * 1024)
dan concat biasa hampir 3 kali lebih cepat (1.1 vs 2.8) daripada menggunakan metode format
dan %
. Saya kira itu tergantung pada senar, dan apa yang ingin Anda capai. Jika kinerja benar-benar penting, mungkin lebih baik mencoba berbagai hal dan mengujinya. Saya cenderung memilih keterbacaan daripada kecepatan, kecuali kecepatan menjadi masalah, tapi itu hanya saya. JADI tidak suka salin / tempel saya, saya harus meletakkan 8 spasi pada semuanya agar terlihat benar. Saya biasanya menggunakan 4.