It depends on the number and type of objects that you combine, as well as the type of result you want.
>>> d = '20160105' >>> t = '013640' >>> d+t '20160105013640' >>> '{}{}'.format(d, t) '20160105013640' >>> hundreds = 2 >>> fifties = 1 >>> twenties = 1 >>> tens = 1 >>> fives = 1 >>> ones = 1 >>> quarters = 2 >>> dimes = 1 >>> nickels = 1 >>> pennies = 1 >>> 'I have ' + str(hundreds) + ' hundreds, ' + str(fifties) + ' fifties, ' + str(twenties) + ' twenties, ' + str(tens) + ' tens, ' + str(fives) + ' fives, ' + str(ones) + ' ones, ' + str(quarters) + ' quarters, ' + str(dimes) + ' dimes, ' + str(nickels) + ' nickels, and ' + str(pennies) + ' pennies.' 'I have 2 hundreds, 1 fifties, 1 twenties, 1 tens, 1 fives, 1 ones, 2 quarters, 1 dimes, 1 nickels, and 1 pennies.' >>> 'I have {} hundreds, {} fifties, {} twenties, {} tens, {} fives, {} ones, {} quarters, {} dimes, {} nickels, and {} pennies.'.format(hundreds, fifties, twenties, tens, fives, ones, quarters, dimes, nickels, pennies) 'I have 2 hundreds, 1 fifties, 1 twenties, 1 tens, 1 fives, 1 ones, 2 quarters, 1 dimes, 1 nickels, and 1 pennies.' >>> f'I have {hundreds} hundreds, {fifties} fifties, {twenties} twenties, {tens} tens, {fives} fives, {ones} ones, {quarters} quarters, {dimes} dimes, {nickels} nickels, and {pennies} pennies.' 'I have 2 hundreds, 1 fifties, 1 twenties, 1 tens, 1 fives, 1 ones, 2 quarters, 1 dimes, 1 nickels, and 1 pennies.'
It is much easier to create a large format string without errors than to do a lot of concatenation. Add in the fact that format strings can handle actual formatting, such as alignment or rounding, and you will soon leave concatenation only for the simplest cases, as shown above.