Ваш вопрос на самом деле не о самом эффективном способе печати строк, а о форматировании их для вывода, для которого вы должны использовать format
в любом случае, потому что это больше, чем простая конкатенация. Тем не менее, вот некоторые заметки о конкатенации.
Редактировать: переписано, чтобы включить некоторые детали
Печать не имеет значения. Важным моментом является то, что из-за того, как некоторые языки обрабатывают конкатенацию строк, объединение множества строк может иметь квадратичный порядок. (Очень наивное и простое) рассуждение состоит в том, что для объединения двух строк вам нужно пройтись по всем символам первой строки, а затем добавить все символы второй строки. Поэтому, если вы объединяете десять строк, сначала вы проходите первую и добавляете вторую, затем вы проходите первую + вторую и добавляете третью, затем вы проходите первую + вторую + третью и добавляете четвертую и т. Д.
Таким образом, наивная реализация конкатенации заставит вас выполнять гораздо больше работы, чем нужно. Действительно, в ранних версиях Python это было проблемой. Тем не менее, @gnibbler указал в комментариях, более поздние версии теперь, как правило, оптимизируют это, таким образом, полностью обсуждая этот вопрос.
Идиома Python для объединения строк: "".join(...)
. Это полностью обходит любую возможную проблему и в любом случае является стандартной идиомой. Если вам нужна возможность создавать строки путем добавления, взгляните на StringIO
:
>>> from io import StringIO
>>> foo = StringIO()
>>> for letter in map(chr, range(128)):
... foo.write(letter)
...
>>> foo.seek(0)
0
>>> foo.read()
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\
x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABC
DEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f'