Поширений антипатерн у Python - це об'єднання послідовності рядків, що використовуються +
в циклі. Це погано, оскільки інтерпретатору Python для кожної ітерації необхідно створити новий об'єкт рядка, і він закінчується квадратичним часом. (Останні версії CPython, очевидно, можуть оптимізувати це в деяких випадках, але інші реалізації не можуть, тому програмісти не рекомендують покладатися на це.) ''.join
Це правильний спосіб зробити це.
Однак я чув, як говорилося (в тому числі тут, на переповнюванні стека ), що ви ніколи і ніколи не використовуйте +
для конкатенації рядків, а натомість завжди використовуйте ''.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__
. Дивіться мою відповідь для прикладів.