Яка різниця між% 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))

2
У Google Chrome: Налаштування >> Пошук >> Керування пошуковими системами ... зауважте, як %sце використовується з конфігураціями пошукової системи. Chrome використовує %sдля заміни ключових слів, введених в адресному рядку. Python використовує %sаналогічним чином. В print('description: %s' % descrip)з %sоператором буде замінений текстового рядка , що зберігається в descripзмінної. Круглі дужки запобігають повідомленню про помилку в Python 3.
noobninja

як ви називаєте цих% s,% d тощо?
Шайн

1
@Chaine їх називають "Place Place", вони є змінними змінними
Лев

@Leo Дякую!
Chaine

37

від python 3 doc

%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))

створить виняток; ви не можете перетворити рядок у число


Це знизить більше підсумків. Він пояснює, що станеться, якщо %sзамість цього використовується число.
Вікас Прасад

1
Яка різниця між% d і% i, якщо обидва перетворять на цілі числа? Як% d порівнюється з% i та% f?
srini

34

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

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

Наприклад (для python 3)

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

Виводить

Joe is 42 years old

6
Це насправді не пояснює проблему? Я не пояснюю проблему, надаю стислу відповідь на питання. Питання конкретно задало, для чого призначені% s та% d.
Радянський

2
чи знаєте ви різницю між% i та% d? підтримує python% i?
cryanbhu

11

Це заповнювачі:

Наприклад: 'Hi %s I have %d donuts' %('Alice', 42)

Цей рядок коду замінить% s на Alice (str) і% d на 42.

Вихід: 'Hi Alice I have 42 donuts'

Цього можна досягти за допомогою "+" більшу частину часу. Щоб глибше зрозуміти своє запитання, ви можете також перевірити {} / .format (). Ось один приклад: Форматування рядків Python:% vs. .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'

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 в рядки з певним форматом.

Дивіться Занурення в 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

2
Яка відповідь стосується цього питання? Допитуючий запитував про використання %sта %d.
Марк Дікінсон

BTW, показаний вами код недійсний у Python 3.5.1: printце функція в Python 3, а не оператор.
Марк Дікінсон

Я відредагував пост ... будь ласка, подивіться його. Насправді я розмістив це як альтернативу. Якщо хтось може уникати використання% d або% s. І дякую за виявлення помилок, ..Я відредагував код.
Sujatha

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.