Распространенным антипаттерном в Python является объединение последовательности строк +
в цикле. Это плохо, потому что интерпретатор Python должен создавать новый строковый объект для каждой итерации, а это в конечном итоге занимает квадратичное время. (Последние версии CPython, очевидно, могут оптимизировать это в некоторых случаях, но другие реализации не могут, поэтому программисты не рекомендуется полагаться на это.) ''.join
- правильный способ сделать это.
Тем не менее, я слышал (в том числе здесь, в Stack Overflow ), что вы никогда не должны использовать +
для конкатенации строк, а вместо этого всегда используйте ''.join
или строку формата. Я не понимаю, почему это так, если вы объединяете только две строки. Если я правильно понимаю, это не должно занимать квадратичное время, и я думаю, что a + b
он чище и читабельнее, чем любой ''.join((a, b))
или '%s%s' % (a, b)
.
Является ли хорошей практикой +
объединение двух строк? Или есть проблема, о которой я не знаю?
+
быстрее или медленнее? И почему?
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__
. См. Мой ответ для примеров.