Concatenating Strings

Steven D'Aprano steve+comp.lang.python at pearwood.info
Fri Apr 10 01:17:31 EDT 2015


On Fri, 10 Apr 2015 04:44 am, Andrew Farrell wrote:

> I am under the impression that using format() is the canonically "right
> way to do it". It is certainly more readable than using ''.join() and is
> more semantically specific than string addition.

Certainly not. Using format in a loop to concatenate thousands of strings
will be horribly slow:

    text = ''
    for word in words:
        text = '{} {}'.format(text, word)


suffers from the problem that it has to create many intermediate strings
that are then just thrown away. The same applies to string interpolation
with the % operator:

    text = ''
    for word in words:
        text = '%s %s' % (text, word)

In both cases, use join:

    text = ' '.join(words)

which is much faster and easier to understand. Unlike repeated
concatenation, or repeated format/interpolation, join() can pre-allocate a
single block of memory for the new string, then fill it in, rather than go
through a loop of 

    allocate memory for a temporary string
    fill it in
    deallocate the previous temporary string

potentially thousands or millions of times.

But for the simple case where you are only concatenating a few substrings,
using format/interpolation is fine.


-- 
Steven




More information about the Python-list mailing list