В чем разница между% s и% d в форматировании строк Python? - PullRequest
104 голосов
/ 27 ноября 2010

Я не понимаю, что делают %s и %d и как они работают.

Ответы [ 11 ]

156 голосов
/ 27 ноября 2010

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

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

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

Подробнее см. https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting.

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

print('%s %d' % (name, number))
28 голосов
/ 27 ноября 2010

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

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

Дляпример (для python 3)

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

Будет выводить

Joe is 42 years old
20 голосов
/ 07 февраля 2018

из Python 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))

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

12 голосов
/ 08 июля 2015

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

Например: '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

9 голосов
/ 20 июня 2016

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

Например:

print("%s" % "hi")

и

print("%d" % 34.6)

Для передачи нескольких аргументов:

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

9 голосов
/ 26 февраля 2016

%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, это будет выглядеть так45 ответов на мой вопрос.

7 голосов
/ 27 ноября 2010

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

См. Погружение в Python для относительно подробного введения.

2 голосов
/ 03 февраля 2016

Если вы хотите избежать% 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
1 голос
/ 30 мая 2019

Это все информативные ответы, но ни один из них не совсем понимает, в чем разница между %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 = 'some_string'
>>> f'{a:s}'
'some_string'
>>> a = 'some_string'
>>> f'{a}'
'some_string'

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

>>> '{}'.format(a)
'some_string'
>>> '{!s}'.format(a)
'some_string'
1 голос
/ 13 октября 2018

Согласно последним стандартам, так и должно быть.

print("My name is {!s} and my number is{:d}".format("Agnel Vishal",100))

Проверьте Python3,6 документов и образец программы

...