Jaka jest różnica między% s i% d w formatowaniu napisów w Pythonie?

Odpowiedzi:

185

Służą do formatowania ciągów. %spełni rolę symbolu zastępczego dla ciągu znaków, podczas gdy %dpełni rolę symbolu zastępczego dla liczby. Powiązane z nimi wartości są przekazywane za pośrednictwem krotki przy użyciu %operatora.

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

wydrukuje marcog 42. Zwróć uwagę, że nazwa jest łańcuchem (% s), a liczba jest liczbą całkowitą (% d jako dziesiętna).

Szczegółowe informacje można znaleźć pod adresem https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting .

W Pythonie 3 przykładem byłoby:

print('%s %d' % (name, number))
moinudin
źródło
2
W Google Chrome: Ustawienia >> Szukaj >> Zarządzaj wyszukiwarkami ... zwróć uwagę, jak %sjest używany z konfiguracjami wyszukiwarek. Chrome %szastępuje słowa kluczowe wpisane w pasku adresu. Python używa %sw podobny sposób. W print('description: %s' % descrip)tym %soperatora zostaną zastąpione przez ciąg tekstowy przechowywany w descripzmiennej. Nawiasy okrągłe zapobiegają wyświetlaniu komunikatu o błędzie w Pythonie 3.
noobninja
jak nazywasz te% s,% d itd.?
Chaine
1
@Chaine nazywane są Placeholderami, są wymiennymi zmiennymi
Leo
@Leo Dziękuję!
Chaine
37

z pythona 3 doc

%d dotyczy liczby całkowitej dziesiętnej

%s jest dla ogólnego ciągu lub obiektu, aw przypadku obiektu zostanie przekonwertowany na łańcuch

Rozważmy następujący kod

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

wyjście będzie

giacomo 4,3 4 4,300000 4,3

jak widać, %dspowoduje obcięcie do liczby całkowitej, %szachowa formatowanie, %fwydrukuje jako zmiennoprzecinkowe i %gjest używane jako liczba ogólna

oczywiście

print('%d' % (name))

wygeneruje wyjątek; nie możesz zamienić łańcucha na liczbę

weneryczny
źródło
To zasługuje na więcej głosów. Wyjaśnia, co by się stało, gdyby %szamiast tego został użyty jako liczba.
Vikas Prasad
1
Jaka jest różnica między% d a% i, jeśli oba zostaną przekonwertowane na liczbę całkowitą? Jak wypada% d w porównaniu z% i i% f?
srini
34

%s jest używany jako symbol zastępczy dla wartości ciągu, które chcesz wstrzyknąć do sformatowanego ciągu.

%d jest używany jako symbol zastępczy wartości liczbowych lub dziesiętnych.

Na przykład (dla Pythona 3)

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

Wyjście

Joe is 42 years old
Soviut
źródło
6
To naprawdę nie wyjaśnia problemu? Ja nie wyjaśniając problem, mam zapewniając zwięzłą odpowiedź na to pytanie. Pytanie dotyczyło konkretnie, do czego służą% s i% d.
Soviut,
2
czy znasz różnicę między% i a% d? czy Python obsługuje% i?
cryanbhu
11

Oto symbole zastępcze:

Na przykład: 'Hi %s I have %d donuts' %('Alice', 42)

Ten wiersz kodu zastąpi% s Alice (str), a% d 42.

Wynik: 'Hi Alice I have 42 donuts'

W większości przypadków można to osiągnąć za pomocą „+”. Aby lepiej zrozumieć swoje pytanie, możesz również sprawdzić {} / .format (). Oto jeden przykład: formatowanie napisów w Pythonie:% kontra .format

zobacz także film instruktażowy google Python @ 40 ', zawiera kilka wyjaśnień https://www.youtube.com/watch?v=tKTZoB2Vjuk

kevin
źródło
10

%dI %sciąg formatowanie „polecenia” są stosowane do ciągów wielkoformatowych. To %djest dla liczb i%s dla łańcuchów.

Dla przykładu:

print("%s" % "hi")

i

print("%d" % 34.6)

Aby przekazać wiele argumentów:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) wróci hi there user123456

Sam Bernstein
źródło
9

Są to wszystko pouczające odpowiedzi, ale żadna z nich nie jest w pełni zrozumiała, jaka jest różnica między %sa%d .

%smówi programowi formatującemu, aby wywołał str()funkcję na argumencie, a ponieważ z definicji wymuszamy na łańcuchu, w %szasadzie po prostu wykonuje str(arg).

%dz drugiej strony odwołuje int()się do argumentu przed wywołaniem str(), na przykład str(int(arg))Spowoduje to zarówno intprzymus, jak i strprzymus.

Na przykład mogę zamienić wartość szesnastkową na dziesiętną,

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

lub obcięcie pływaka.

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

Ale operacja zgłosi wyjątek, jeśli argument nie jest liczbą.

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

Więc jeśli intencją jest tylko zadzwonić str(arg), to%s jest wystarczające, ale jeśli potrzebujesz dodatkowego formatowania (jak formatowanie zmiennoprzecinkowych miejsc dziesiętnych) lub innego przymusu, potrzebne są inne symbole formatu.

W przypadku f-stringnotacji, gdy opuścisz formater, wartością domyślną jeststr .

>>> 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'

To samo dotyczy string.format; wartość domyślna to str.

>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'
Wyrmwood
źródło
8

%di %ssą symbolami zastępczymi, działają jako zmienna wymienna. Na przykład, jeśli utworzysz 2 zmienne

variable_one = "Stackoverflow"
variable_two = 45

możesz przypisać te zmienne do zdania w łańcuchu za pomocą krotki zmiennych.

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

Zauważ, że %sdziała dla String i%d działa dla zmiennych numerycznych lub dziesiętnych.

jeśli wydrukujesz variable_3, będzie wyglądać tak

print(variable_3 % (variable_one, variable_two))

Szukałem odpowiedzi w StackOverflow i znalazłem ponad 45 odpowiedzi na moje pytanie.

Lew
źródło
5

Są to specyfikatory formatu. Są używane, gdy chcesz zawrzeć wartość wyrażeń Pythona w łańcuchach, z wymuszonym określonym formatem.

Aby uzyskać stosunkowo szczegółowe wprowadzenie, zobacz Zanurz się w Pythonie .

Lucas Jones
źródło
2

Jeśli chcesz uniknąć% s lub% d, to ...

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

Wynik:

my name is marcog and my name is 42
Sujatha
źródło
2
Co ta odpowiedź ma wspólnego z pytaniem? Pytający pytał o użycie %si %d.
Mark Dickinson
BTW, pokazany kod jest nieprawidłowy w Pythonie 3.5.1: printjest funkcją w Pythonie 3, a nie instrukcją.
Mark Dickinson,
Edytowałem post ... zobacz go. Właściwie to opublikowałem to jako alternatywę, jeśli ktoś mógłby uniknąć używania% d lub% s. Dziękuję za wykrycie błędów ... Edytowałem kod.
Sujatha
3
Dzięki za zmiany. Niestety, to wciąż nie jest odpowiedź na pytanie.
Mark Dickinson
2

% s służy do przechowywania miejsca dla ciągu znaków% d służy do przechowywania miejsca na liczbę

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

Wyjście programu

ten film szczegółowo omawia tę wskazówkę https://www.youtube.com/watch?v=4zN5YsuiqMA

Noel Moses Mwadende
źródło
Witamy w Stack Overflow! Jak twoja odpowiedź różni się od pozostałych 12?
Vasil Velichkov
prawie ten format działa tak samo, ale chciałem tylko podać więcej przykładów, aby zwiększyć zrozumienie
Noel Moses Mwadende,
To wspaniale! Możesz poprawić swoją odpowiedź, dodając wynik programu jako tekst, a nie jako obraz.
Vasil Velichkov
dziękuję za troskę, wprowadzę pewne zmiany, nie ma za co
Noel Moses Mwadende
1

skoro o tym mowa ...
python3.6 jest f-stringsznacznie łatwiejszy w formatowaniu!
teraz, jeśli twoja wersja Pythona jest większa niż 3.6, możesz sformatować swoje ciągi za pomocą tych dostępnych metod:

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
źródło