In Python say you have
s = "string"
i = 0
print s + i
will give you error, so you write
print s + str(i)
to not get error.
I think this is quite a clumsy way to handle int and string concatenation.
Even Java does not need explicit casting to String to do this sort of concatenation. Is there a better way to do this sort of concatenation, i.e, without explicit casting in Python?
9 Answers
Modern string formatting:
"{} and {}".format("string", 1)
No string formatting:
>> print 'Foo',0
Foo 0
String formatting, using the new-style .format() method (with the defaults .format() provides):
'{}{}'.format(s, i)
Or the older, but "still sticking around", %-formatting:
'%s%d' %(s, i)
In both examples above there's no space between the two items concatenated. If space is needed, it can simply be added in the format strings.
These provide a lot of control and flexibility about how to concatenate items, the space between them etc. For details about format specifications see this.
Python is an interesting language in that while there is usually one (or two) "obvious" ways to accomplish any given task, flexibility still exists.
s = "string"
i = 0
print (s + repr(i))
The above code snippet is written in Python 3 syntax, but the parentheses after print were always allowed (optional) until version 3 made them mandatory.
The format() method can be used to concatenate a string and an integer:
print(s + "{}".format(i))
In Python 3.6 and newer, you can format it just like this:
new_string = f'{s} {i}'
print(new_string)
Or just:
print(f'{s} {i}')
If you only want to print, you can do this:
print(s, i)
Let's assume you want to concatenate a string and an integer in a situation like this:
for i in range(1, 11):
string = "string" + i
And you are getting a type or concatenation error.
The best way to go about it is to do something like this:
for i in range(1, 11):
print("string", i)
This will give you concatenated results, like string 1, string 2, string 3, etc.
You can use the an f-string too!
s = "string"
i = 95
print(f"{s}{i}")