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

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ę


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

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


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


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'

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.


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 .



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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.