Your question isn't really about the most efficient way to print strings, it's about formatting them for output, for which you should use format in any case because it does more than simple concatenation. However, here are some notes on concatenation.
Edit: rewritten to include some details
The printing is irrelevant. The important point is that due to the way that some languages handle string concatenation, joining lots of strings may be of quadratic order. The (very naive and basic) reasoning is that to concatenate two strings you have to walk down all the characters of the first string and then append all the characters of the second. So if you are concatenating ten strings, you first walk the first and append the second, then you walk the first+second and append the third, then you walk the first+second+third and append the fourth, and so on.
A naive implementation of concatenation will thus cause you to do much more work than you need to. Indeed, in early versions of Python this was an issue. However, @gnibbler has pointed out in the comments, later versions now generally optimise this, thus mooting the point entirely.
The Python idiom to join strings is "".join(...). This completely bypasses any possible issue and is the standard idiom anyway. If you want the ability to construct a string by appending, have a look at a 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'
printwould add newline at the end of the string, so your first example isn't equivalent to the second.print "My name is {name}".format(name='Parker')