Tôi chỉ đang thử nghiệm tốc độ của các phương pháp nối / thay thế chuỗi khác nhau vì tò mò. Một tìm kiếm trên google về chủ đề này đã đưa tôi đến đây. Tôi nghĩ rằng tôi sẽ đăng kết quả kiểm tra của mình với hy vọng rằng nó có thể giúp ai đó quyết định.
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)
... Sau khi chạy runtests((percent_, format_, format2_, concat_), runs=5)
, tôi thấy rằng phương thức% nhanh gấp đôi so với các phương thức khác trên các chuỗi nhỏ này. Phương thức concat luôn là chậm nhất (hầu như không). Có sự khác biệt rất nhỏ khi chuyển đổi vị trí trongformat()
phương pháp, nhưng chuyển đổi vị trí luôn chậm hơn ít nhất 0,01 so với phương pháp định dạng thông thường.
Mẫu kết quả kiểm tra:
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)
Tôi đã chạy những điều này bởi vì tôi sử dụng nối chuỗi trong các tập lệnh của mình và tôi đã tự hỏi chi phí là bao nhiêu. Tôi đã chạy chúng theo các thứ tự khác nhau để đảm bảo không có gì can thiệp hoặc đạt được hiệu suất tốt hơn dù là đầu tiên hay cuối cùng. Một lưu ý nhỏ, tôi đã đưa vào một số trình tạo chuỗi dài hơn vào các hàm như vậy "%s" + ("a" * 1024)
và concat thông thường nhanh hơn gần 3 lần (1.1 so với 2.8) so với sử dụng các phương thức format
và %
. Tôi đoán nó phụ thuộc vào các chuỗi, và những gì bạn đang cố gắng đạt được. Nếu hiệu suất thực sự quan trọng, tốt hơn là bạn nên thử những thứ khác nhau và kiểm tra chúng. Tôi có xu hướng chọn khả năng đọc hơn tốc độ, trừ khi tốc độ trở thành vấn đề, nhưng đó chỉ là tôi. VẬY không thích sao chép / dán của tôi, tôi phải đặt 8 khoảng trắng trên mọi thứ để làm cho nó trông đúng. Tôi thường sử dụng 4.