Кращий спосіб додавання рядка в строкової змінної є використання +або +=. Це тому, що воно читабельне та швидке. Вони також настільки ж швидкі, який ви обираєте - це питання смаку, останній - найпоширеніший. Ось таймінги з timeitмодулем:
a = a + b:
0.11338996887207031
a += b:
0.11040496826171875
Однак ті, хто рекомендує скласти списки та додати їх до них, а потім приєднатись до цих списків, зробіть це, тому що додавання рядка до списку, імовірно, дуже швидке порівняно з розширенням рядка. І це може бути правдою, в деяких випадках. Ось, наприклад, один мільйон додань односимвольної рядки спочатку до рядка, а потім до списку:
a += b:
0.10780501365661621
a.append(b):
0.1123361587524414
Гаразд, виявляється, що навіть коли отриманий рядок становить мільйон символів, додавання все ж було швидше.
Тепер спробуємо додати тисячу символів довгим рядком сто тисяч разів:
a += b:
0.41823482513427734
a.append(b):
0.010656118392944336
Таким чином, кінцевий рядок закінчується приблизно 100 МБ. Це було досить повільно, додавання до списку було набагато швидше. Що цей термін не включає фінал a.join(). То скільки часу це займе?
a.join(a):
0.43739795684814453
Ой. Виходить навіть у цьому випадку додавання / з'єднання відбувається повільніше.
То звідки береться ця рекомендація? Python 2?
a += b:
0.165287017822
a.append(b):
0.0132720470428
a.join(a):
0.114929914474
Ну, додавання / приєднання там незначно швидше, якщо ви використовуєте надзвичайно довгі рядки (яких ви зазвичай не є.
Але справжній клінік - Python 2.3. Де я навіть не показуватиму вам терміни, тому що це так повільно, що ще не закінчилося. Ці випробування раптом займають хвилини . За винятком додавання / з'єднання, яке відбувається так само швидко, як і пізніші пітони.
Так. Сполучення струн у Python було дуже повільним ще в кам'яну епоху. Але на 2.4 це вже не є (або принаймні Python 2.4.7), тому рекомендація щодо використання додавання / приєднання застаріла в 2008 році, коли Python 2.3 перестав оновлюватись, і вам слід було б припинити його використання. :-)
(Оновлення: Виявляється, коли я тестування робив ретельніше, що використовує +і +=швидше для двох рядків на Python 2.3. Рекомендація щодо використання ''.join()повинна бути непорозумінням)
Однак це CPython. Інші реалізації можуть мати інші проблеми. І це лише ще одна причина, чому передчасна оптимізація є коренем усього зла. Не використовуйте техніку, яка повинна бути "швидшою", якщо спочатку її не виміряєте.
Тому "найкращою" версією для з'єднання рядків є використання + або + = . І якщо це виявиться для вас повільним, що навряд чи, то зробіть щось інше.
То чому я використовую в своєму коді багато додавання / приєднання? Бо іноді насправді зрозуміліше. Особливо, коли все, що ви повинні об'єднати разом, слід розділяти пробілами, комами чи новими рядками.