Một phản vật chất phổ biến trong Python là nối một chuỗi các chuỗi bằng cách sử dụng +
trong một vòng lặp. Điều này thật tệ vì trình thông dịch Python phải tạo một đối tượng chuỗi mới cho mỗi lần lặp và nó sẽ mất thời gian bậc hai. (Các phiên bản gần đây của CPython rõ ràng có thể tối ưu hóa điều này trong một số trường hợp, nhưng các triển khai khác không thể, vì vậy các lập trình viên không nên dựa vào điều này.) ''.join
Là cách phù hợp để làm điều này.
Tuy nhiên, tôi đã nghe nó nói ( bao gồm cả ở đây trên Stack Overflow ) rằng bạn không bao giờ nên sử dụng +
để nối chuỗi, mà thay vào đó hãy luôn sử dụng ''.join
hoặc một chuỗi định dạng. Tôi không hiểu tại sao lại xảy ra trường hợp này nếu bạn chỉ nối hai chuỗi. Nếu sự hiểu biết của tôi là đúng, nó sẽ không mất thời gian bậc hai, và tôi nghĩ a + b
nó rõ ràng hơn và dễ đọc hơn là ''.join((a, b))
hoặc '%s%s' % (a, b)
.
Có thực hành tốt để sử dụng +
để nối hai chuỗi không? Hay có vấn đề gì mà tôi không biết?
+
là nhanh hơn hay chậm hơn? Và tại sao?
In [2]: %timeit "a"*80 + "b"*80
1000000 loops, best of 3: 356 ns per loop
In [3]: %timeit "%s%s" % ("a"*80, "b"*80)
1000000 loops, best of 3: 907 ns per loop
In [3]: %timeit "%s%s" % (a, b) 1000000 loops, best of 3: 590 ns per loop
In [4]: %timeit a + b 10000000 loops, best of 3: 147 ns per loop
__str__
. Xem câu trả lời của tôi cho các ví dụ.