Cách tốt nhất để nối một chuỗi vào biến chuỗi là sử dụng +
hoặc +=
. Điều này là do nó dễ đọc và nhanh chóng. Chúng cũng nhanh như vậy, cái nào bạn chọn là vấn đề của hương vị, cái sau là phổ biến nhất. Dưới đây là thời gian với các timeit
mô-đun:
a = a + b:
0.11338996887207031
a += b:
0.11040496826171875
Tuy nhiên, những người khuyên nên có danh sách và nối thêm vào danh sách đó và sau đó tham gia vào danh sách đó, hãy làm như vậy bởi vì việc thêm chuỗi vào danh sách có lẽ rất nhanh so với việc mở rộng chuỗi. Và điều này có thể đúng, trong một số trường hợp. Ví dụ, ở đây là một triệu phụ lục của chuỗi một ký tự, đầu tiên là chuỗi, sau đó vào danh sách:
a += b:
0.10780501365661621
a.append(b):
0.1123361587524414
OK, hóa ra ngay cả khi chuỗi kết quả dài một triệu ký tự, việc nối thêm vẫn nhanh hơn.
Bây giờ, hãy thử nối thêm một chuỗi ký tự dài một trăm nghìn lần:
a += b:
0.41823482513427734
a.append(b):
0.010656118392944336
Chuỗi kết thúc, do đó, kết thúc dài khoảng 100 MB. Điều đó khá chậm, việc thêm vào một danh sách nhanh hơn nhiều. Rằng thời gian đó không bao gồm trận chung kết a.join()
. Vì vậy, sẽ mất bao lâu?
a.join(a):
0.43739795684814453
Oup. Hóa ra ngay cả trong trường hợp này, nối / nối chậm hơn.
Vậy khuyến nghị này đến từ đâu? Con trăn 2?
a += b:
0.165287017822
a.append(b):
0.0132720470428
a.join(a):
0.114929914474
Chà, nối / nối sẽ nhanh hơn một chút nếu bạn đang sử dụng các chuỗi cực dài (mà bạn thường không biết, bạn sẽ có chuỗi nào trong bộ nhớ 100MB?)
Nhưng móc sắt thực sự là Python 2.3. Nơi tôi thậm chí sẽ không chỉ cho bạn thời gian, vì nó quá chậm mà chưa hoàn thành. Những bài kiểm tra đột nhiên mất vài phút . Ngoại trừ việc nối thêm / tham gia, cũng nhanh như dưới thời Pythons sau này.
Vâng Chuỗi kết nối rất chậm trong Python trở lại thời kỳ đồ đá. Nhưng vào ngày 2.4, nó không còn nữa (hoặc ít nhất là Python 2.4.7), do đó, khuyến nghị sử dụng nối / nối đã trở nên lỗi thời vào năm 2008, khi Python 2.3 ngừng cập nhật và bạn nên ngừng sử dụng nó. :-)
(Cập nhật: Hóa ra khi tôi thực hiện kiểm tra cẩn thận hơn bằng cách sử dụng +
và +=
nhanh hơn cho hai chuỗi trên Python 2.3. Đề xuất sử dụng ''.join()
phải là một sự hiểu lầm)
Tuy nhiên, đây là CPython. Thực hiện khác có thể có mối quan tâm khác. Và đây chỉ là một lý do khác tại sao tối ưu hóa sớm là gốc rễ của mọi tội lỗi. Đừng sử dụng một kỹ thuật được cho là "nhanh hơn" trừ khi bạn lần đầu tiên đo nó.
Do đó, phiên bản "tốt nhất" để thực hiện nối chuỗi là sử dụng + hoặc + = . Và nếu điều đó trở nên chậm chạp đối với bạn, điều này khá khó xảy ra, thì hãy làm điều gì đó khác.
Vậy tại sao tôi sử dụng nhiều phụ lục / tham gia vào mã của mình? Bởi vì đôi khi nó thực sự rõ ràng hơn. Đặc biệt là khi bất cứ điều gì bạn nên ghép lại với nhau nên được phân tách bằng dấu cách hoặc dấu phẩy hoặc dòng mới.