В чем разница между% s и% d в форматировании строк Python?

Ответы:

185

Они используются для форматирования строк. %sдействует в качестве заполнителя для строки, а %dв качестве заполнителя для числа. Их связанные значения передаются через кортеж с помощью %оператора.

name = 'marcog'
number = 42
print '%s %d' % (name, number)

напечатает marcog 42. Обратите внимание, что имя - это строка (% s), а число - целое число (% d для десятичного числа).

См. Https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting для получения подробной информации.

В Python 3 пример будет:

print('%s %d' % (name, number))
moinudin
источник
2
В Google Chrome: Настройки >> Поиск >> Управление поисковыми системами ... обратите внимание, как %sэто используется с конфигурациями поисковых систем. Chrome использует %sдля замены ключевых слов, введенных в адресной строке. Python использует %sаналогичным образом. В print('description: %s' % descrip)с %sоператором будет заменен текстовой строки , хранящейся в descripпеременной. Круглые скобки предотвращают сообщение об ошибке в Python 3.
noobninja
как вы называете эти% s,% d и т. д.?
Chaine
1
@ Чейн, они называются заполнителями, они являются заменяемыми переменными
Лев
@ Лео Спасибо!
Chaine
37

из питона 3 док

%d для десятичного целого числа

%s для общей строки или объекта, а в случае объекта она будет преобразована в строку

Рассмотрим следующий код

name ='giacomo'
number = 4.3
print('%s %s %d %f %g' % (name, number, number, number, number))

выход будет

giacomo 4.3 4 4.300000 4.3

как вы можете видеть, %dбудет усекать до целого числа, %sбудет поддерживать форматирование, %fпечатать как число с плавающей точкой и %gбудет использоваться для общего числа

очевидно

print('%d' % (name))

сгенерирует исключение; вы не можете преобразовать строку в число

venergiac
источник
Это требует больше голосов. Это объясняет, что произойдет, если %sвместо этого используется номер.
Викас Прасад
1
В чем разница между% d и% i, если оба преобразуются в целое число? Как% d сравнивается с% i и% f?
Срини
34

%s используется в качестве заполнителя для строковых значений, которые вы хотите вставить в форматированную строку.

%d используется в качестве заполнителя для числовых или десятичных значений.

Например (для питона 3)

print ('%s is %d years old' % ('Joe', 42))

Будет выходной

Joe is 42 years old
Soviut
источник
6
Разве это не объясняет проблему? Я не объясняя проблему, я обеспечиваю краткий ответ на этот вопрос. В частности, был задан вопрос, для чего предназначены% s и% d.
Совьют
2
Вы знаете разницу между% i и% d? Python поддерживает% I?
крианбху
11

Это заполнители:

Например: 'Hi %s I have %d donuts' %('Alice', 42)

Эта строка кода заменит% s Алисой (str) и% d 42.

Вывод: 'Hi Alice I have 42 donuts'

Это может быть достигнуто с "+" большую часть времени. Чтобы глубже понять ваш вопрос, вы можете также проверить {} / .format (). Вот один пример: форматирование строки Python:% против .format

также смотрите здесь обучающее видео по Google Python @ 40 ', в нем есть некоторые объяснения https://www.youtube.com/watch?v=tKTZoB2Vjuk

Кевин
источник
10

%dИ %sстрока форматирования «команды» используются для строк формата. Это %dдля чисел и %sдля строк.

Для примера:

print("%s" % "hi")

и

print("%d" % 34.6)

Чтобы передать несколько аргументов:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) вернется hi there user123456

Сэм Бернштейн
источник
9

Все это информативные ответы, но ни один из них не совсем понимает, в чем разница между %sи %d.

%sговорит форматировщику вызвать str()функцию для аргумента, и поскольку мы приводим строку к определению, %sпо сути, просто выполняем str(arg).

%dс другой стороны, вызывает int()аргумент перед вызовом str(), например str(int(arg)), это вызовет intкак принуждение, так и strпринуждение.

Например, я могу преобразовать шестнадцатеричное значение в десятичное,

>>> '%d' % 0x15
'21'

или обрезать поплавок.

>>> '%d' % 34.5
'34'

Но операция вызовет исключение, если аргумент не является числом.

>>> '%d' % 'thirteen'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

Так что, если целью является просто вызов str(arg), то этого %sдостаточно, но если вам нужно дополнительное форматирование (например, форматирование с плавающей запятой) или другое приведение, тогда нужны другие символы формата.

В f-stringобозначениях, когда вы оставляете форматер вне, по умолчанию используется str.

>>> a = 1
>>> f'{a}'
'1'
>>> f'{a:d}'
'1'
>>> a = '1'
>>> f'{a:d}'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Unknown format code 'd' for object of type 'str'

То же самое относится и к string.format; по умолчанию это str.

>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'
Wyrmwood
источник
8

%dи %sявляются заполнителями, они работают как заменяемая переменная. Например, если вы создаете 2 переменные

variable_one = "Stackoverflow"
variable_two = 45

Вы можете назначить эти переменные предложению в строке, используя кортеж переменных.

variable_3 = "I was searching for an answer in %s and found more than %d answers to my question"

Обратите внимание, что %sработает для String и %dработает для числовых или десятичных переменных.

если вы напечатаете variable_3это будет выглядеть так

print(variable_3 % (variable_one, variable_two))

Я искал ответ в StackOverflow и нашел более 45 ответов на мой вопрос.

Лео
источник
5

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

Смотрите Dive into Python для относительно подробного введения.

Лукас Джонс
источник
2

Если вы хотите избежать% s или% d, тогда ..

name = 'marcog'
number = 42
print ('my name is',name,'and my age is:', number)

Вывод:

my name is marcog and my name is 42
Sujatha
источник
2
Как этот ответ связан с вопросом? Спрашивающий спрашивал об использовании %sи %d.
Марк Дикинсон
Кстати, код, который вы показываете, недопустим в Python 3.5.1: printэто функция в Python 3, а не оператор.
Марк Дикинсон
Я отредактировал пост ... пожалуйста, посмотрите его. На самом деле, я разместил это как альтернативу ... если кто-то может избежать использования% d или% s. И спасибо за обнаружение ошибок, .. Я отредактировал код.
Суджата
3
Спасибо за правки. К сожалению, это все еще не ответ на вопрос.
Марк Дикинсон
2

% s используется для хранения пробела для строки% d используется для хранения пробела для числа

name = "Moses";
age = 23
print("My name is %s am CEO at MoTech Computers " %name)
print("Current am %d years old" %age)
print("So Am %s and am %d years old" %(name,age))

Выход программы

это видео подробно рассказывает об этом совете https://www.youtube.com/watch?v=4zN5YsuiqMA

Ноэль Моисей Мваденде
источник
Добро пожаловать в стек переполнения! Чем ваш ответ отличается от остальных 12?
Василь Величков
почти эти форматы работают одинаково, но все, что я хотел, это привести больше примеров, чтобы улучшить понимание
Ноэль Мозес Мваденде
Замечательно! Вы можете улучшить свой ответ, добавив вывод программы в виде текста, а не в виде изображения.
Василь Величков
спасибо за вашу заботу, я
внесу
1

Говоря о том, что ...
Python3.6 идет с, f-stringsчто делает вещи намного проще в форматировании!
Теперь, если ваша версия Python больше 3,6, вы можете отформатировать строки с помощью следующих доступных методов:

name = "python"

print ("i code with %s" %name)          # with help of older method
print ("i code with {0}".format(name))  # with help of format
print (f"i code with {name}")           # with help of f-strings
a_m_dev
источник