Конкатенация строки и целого числа в Python


136

В питоне говорят, что у вас есть

s = "string"
i = 0
print s+i

даст вам ошибку, так что вы пишете

print s+str(i) 

чтобы не получить ошибку.

Я думаю, что это довольно неуклюжий способ обработки конкатенации int и string. Даже Java не нуждается в явном приведении к String для такого рода конкатенации. Есть ли лучший способ сделать этот вид конкатенации, то есть без явного приведения в Python?


8
Это потому, что Python является языком со строгой типизацией ( en.wikipedia.org/wiki/Strong_typing ) (что-то, что нужно Google, чтобы понять больше :)).
Муад

3
Это привело бы к двусмысленности. Что будет результатом "1" + 1, 2или "11"и почему?
Бадди

1
Дружище, я не уверен, о чем ты думаешь, но, пожалуйста, не предполагай Моя проблема заключалась в объединении двух разных типов объектов, и я нашел решение. Я не знаю, сколько вы программировали на python, но пытались ли вы когда-нибудь объединить две строки только для того, чтобы получить ошибку, когда одна из них имеет тип None? Вы можете делать явные проверки, но это всего лишь дополнительный фрагмент кода. Такие вещи требуются, когда вам нужно регистрировать ошибки.
спец.

2
Просто s+str(i)и ты прав!

Ответы:


174

Современное форматирование строки:

"{} and {}".format("string", 1)

5
Просто для потомков, так как вещи изменились в прошлом и, вероятно, изменятся в будущем: это «современный», с какой версией?
jvriesem


87

Нет форматирования строки:

>> print 'Foo',0
Foo 0

2
Это будет хорошо работать с печатью, но не может быть присвоено переменной в виде строки. Это дает Set объект.
спецоскоп

2
Он также вставляет дополнительный пробел между двумя элементами, если вы не используете print() функцию v3 и не устанавливаете некоторые из ее параметров.
Левон

34

Форматирование строки с использованием .format()метода нового стиля (с настройками по умолчанию .format () ):

 '{}{}'.format(s, i)

Или старшего, но «все еще торчащего», - %форматирующего

 '%s%d' %(s, i)

В обоих приведенных выше примерах нет места между двумя соединенными элементами. Если требуется место, его можно просто добавить в строки формата.

Они обеспечивают большой контроль и гибкость в отношении того, как объединять элементы, пространство между ними и т. Д. Подробную информацию о спецификациях формата см . Здесь.


14

Python является интересным языком в том смысле, что, хотя обычно есть один (или два) «очевидных» способа выполнить любую заданную задачу, гибкость все еще существует.

s = "string"
i = 0

print (s + repr(i))

Приведенный выше фрагмент кода написан в синтаксисе Python3, но круглые скобки после печати всегда разрешались (необязательно), пока версия 3 не сделала их обязательными.

Надеюсь это поможет.

Кейтлин




0

в Python 3.6 и новее вы можете отформатировать его так:

new_string = f'{s} {i}'
print(new_string)

или просто:

print(f'{s} {i}')
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.