Отличный ответ от SilenGhost, НО, всего несколько слов о представленной reduce
"альтернативе"
Если у вас нет очень-очень ОЧЕНЬ веских причин для объединения строк с использованием +
или operator.add
(наиболее частая, когда у вас мало фиксированного числа строк), Вы должны использовать всегда join
.
Просто потому, что каждый +
генерирует новую строку, которая является объединением двух строк, если соединение, которое генерирует только одну финальную строку. Итак, представьте, что у вас есть 3 строки:
A + B + C
-->
D = A + B
final = D + C
Хорошо, кажется, не так много, но вы должны зарезервировать память для D. Кроме того, из-за использования строк на python, генерирующих новую промежуточную строку, это как-то дорого ...
Теперь с 5 строками
A + B + C + D + E
-->
F = A + B
G = F + C
H = G + D
final = H + E
Предполагая лучший сценарий (если мы выполним (A + B) + (C + D) + E, у нас закончится три промежуточных строки в памяти одновременно), это создаст 3 промежуточные строки ... Вы нам нужно сгенерировать новый объект python, зарезервировать пространство памяти, освободить память несколько раз ... Также накладные расходы при вызове функции Python (что не мало)
Теперь подумайте об этом с 200 строками. В итоге мы получим смехотворно большое количество промежуточных строк, каждая из которых потребляет достаточно много времени для объединения в полный список над Python и вызова большого количества operator.add
функций, каждая из которых имеет свои издержки ... Даже если Вы используете reduce
функции, это не поможет. Эта проблема должна решаться с помощью другого подхода: join
, который генерирует только ONE завершенную строку Python, последнюю и вызывает ОДНУ функцию Python.
(конечно, join
или другая аналогичная специализированная функция для массивов)