I realise that if you have an iterable you should always use .join(iterable)
instead of for x in y: str += x
. But if there's only a fixed number of variables that aren't already in an iterable, is using .join()
still the recommended way?
For example I have
user = 'username'
host = 'host'
should I do
ret = user + '@' + host
or
ret = '@'.join([user, host])
I'm not so much asking from a performance point of view, since both will be pretty trivial. But I've read people on here say always use .join()
and I was wondering if there's any particular reason for that or if it's just generally a good idea to use .join()
.
If you're creating a string like that, you normally want to use string formatting:
>>> user = 'username'
>>> host = 'host'
>>> '%s@%s' % (user, host)
'username@host'
Python 2.6 added another form, which doesn't rely on operator overloading and has some extra features:
>>> '{0}@{1}'.format(user, host)
'username@host'
As a general guideline, most people will use +
on strings only if they're adding two strings right there. For more parts or more complex strings, they either use string formatting, like above, or assemble elements in a list and join them together (especially if there's any form of looping involved.) The reason for using str.join()
is that adding strings together means creating a new string (and potentially destroying the old ones) for each addition. Python can sometimes optimize this away, but str.join()
quickly becomes clearer, more obvious and significantly faster.