Was ist der Unterschied zwischen% s und% d bei der Formatierung von Python-Zeichenfolgen?

138

Ich verstehe nicht, was %sund %dwas und wie sie funktionieren.

karlzt
quelle

Antworten:

185

Sie werden zum Formatieren von Zeichenfolgen verwendet. %sfungiert als Platzhalter für eine Zeichenfolge, während er %dals Platzhalter für eine Zahl fungiert. Die zugehörigen Werte werden mit dem %Operator über ein Tupel übergeben .

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

wird gedruckt marcog 42. Beachten Sie, dass der Name eine Zeichenfolge (% s) und die Zahl eine Ganzzahl ist (% d für Dezimalzahl).

Weitere Informationen finden Sie unter https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting .

In Python 3 wäre das Beispiel:

print('%s %d' % (name, number))
Moinudin
quelle
2
In Google Chrome: Einstellungen >> Suche >> Suchmaschinen verwalten ... Beachten Sie, wie %sbei Suchmaschinenkonfigurationen verwendet wird. Chrome %sersetzt in der Adressleiste eingegebene Keywords. Python verwendet %sauf ähnliche Weise. In print('description: %s' % descrip)dem %sBediener wird durch die Textzeichenfolge in der gespeicherten ersetzt werden descripvariabel. Die runden Klammern verhindern eine Fehlermeldung in Python 3.
Noobninja
Wie nennt man diese% s,% d usw.?
Chaine
1
@Chaine sie werden Platzhalter genannt, sie sind austauschbare Variablen
Leo
@ Leo Danke!
Chaine
36

von Python 3 doc

%d steht für Dezimalzahl

%s ist für generische Zeichenfolge oder Objekt und wird im Falle eines Objekts in Zeichenfolge konvertiert

Betrachten Sie den folgenden Code

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

die Ausgabe wird sein

giacomo 4.3 4 4.300000 4.3

Wie Sie sehen können, %dwird auf Ganzzahl abgeschnitten, %sdie Formatierung beibehalten, %fals float und gedruckt%g für generische Zahlen verwendet

offensichtlich

print('%d' % (name))

generiert eine Ausnahme; Sie können keine Zeichenfolge in eine Zahl konvertieren

venergiac
quelle
Dies verdient mehr positive Stimmen. Es wird erklärt, was passieren würde, wenn %sstattdessen eine Zahl verwendet wird.
Vikas Prasad
1
Was ist der Unterschied zwischen% d und% i, wenn beide in eine Ganzzahl konvertiert werden? Wie vergleicht sich% d mit% i und% f?
Srini
34

%s wird als Platzhalter für Zeichenfolgenwerte verwendet, die Sie in eine formatierte Zeichenfolge einfügen möchten.

%d wird als Platzhalter für numerische oder dezimale Werte verwendet.

Zum Beispiel (für Python 3)

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

Würde ausgeben

Joe is 42 years old
Soviut
quelle
6
Erklärt das Problem nicht wirklich? Ich erkläre das Problem nicht, ich gebe eine kurze Antwort auf die Frage. In der Frage wurde speziell gefragt, wofür% s und% d bestimmt sind.
Soviut
2
Kennen Sie den Unterschied zwischen% i und% d? unterstützt Python% i?
Cryanbhu
11

Dies sind Platzhalter:

Beispielsweise: 'Hi %s I have %d donuts' %('Alice', 42)

Diese Codezeile ersetzt% s durch Alice (str) und% d durch 42.

Ausgabe: 'Hi Alice I have 42 donuts'

Dies könnte die meiste Zeit mit einem "+" erreicht werden. Um Ihre Frage besser zu verstehen, sollten Sie auch {} / .format () überprüfen. Hier ist ein Beispiel: Python-String-Formatierung:% vs. .format

Sehen Sie hier auch ein Google Python-Tutorial-Video @ 40 ', das einige Erklärungen enthält: https://www.youtube.com/watch?v=tKTZoB2Vjuk

Kevin
quelle
10

Die Befehle %dund %sZeichenfolgenformatierung "Befehle" werden zum Formatieren von Zeichenfolgen verwendet. Das %dist für Zahlen und %sist für Zeichenfolgen.

Zum Beispiel:

print("%s" % "hi")

und

print("%d" % 34.6)

So übergeben Sie mehrere Argumente:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) wird zurückkehren hi there user123456

Sam Bernstein
quelle
9

Dies sind alles informative Antworten, aber keine bringt den Unterschied zwischen %sund auf den Punkt %d.

%sstr()Weist den Formatierer an, die Funktion für das Argument aufzurufen, und da wir per Definition zu einem String zwingen, %swird im Wesentlichen nur ausgeführt str(arg).

%dAuf der anderen Seite wird int()das Argument vor dem Aufruf aufgerufen str(), wie z. B. str(int(arg))Dies wird sowohl intZwang als auch strZwang verursachen.

Zum Beispiel kann ich einen Hex-Wert in eine Dezimalzahl konvertieren.

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

oder einen Schwimmer abschneiden.

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

Die Operation löst jedoch eine Ausnahme aus, wenn das Argument keine Zahl ist.

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

Wenn also nur angerufen werden soll str(arg), dann%s ist dies ausreichend. Wenn Sie jedoch zusätzliche Formatierungen (wie das Formatieren von Gleitkomma-Dezimalstellen) oder anderen Zwang benötigen, werden die anderen Formatsymbole benötigt.

Mit der f-stringNotation ist die Standardeinstellung, wenn Sie den Formatierer weglassen 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'

Das gleiche gilt für string.format; Der Standardwert ist str.

>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'
Wyrmwood
quelle
8

%dund %ssind Platzhalter, sie arbeiten als austauschbare Variable. Zum Beispiel, wenn Sie 2 Variablen erstellen

variable_one = "Stackoverflow"
variable_two = 45

Sie können diese Variablen einem Satz in einer Zeichenfolge mithilfe eines Tupels der Variablen zuweisen.

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

Beachten Sie, dass dies %sfür String und funktioniert%d für numerische oder dezimale Variablen funktioniert.

Wenn Sie drucken variable_3, würde es so aussehen

print(variable_3 % (variable_one, variable_two))

Ich habe in StackOverflow nach einer Antwort gesucht und mehr als 45 Antworten auf meine Frage gefunden.

Löwe
quelle
5

Sie sind Formatspezifizierer. Sie werden verwendet, wenn Sie den Wert Ihrer Python-Ausdrücke in Zeichenfolgen einfügen möchten, wobei ein bestimmtes Format erzwungen wird.

Eine relativ detaillierte Einführung finden Sie unter Eintauchen in Python .

Lucas Jones
quelle
3

Nach den neuesten Standards sollte dies so erfolgen.

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

Überprüfen Sie die Python3.6-Dokumente und das Beispielprogramm

Agnel Vishal
quelle
2

Wenn Sie% s oder% d vermeiden möchten, dann ..

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

Ausgabe:

my name is marcog and my name is 42
Sujatha
quelle
2
Was hat diese Antwort mit der Frage zu tun? Der Fragesteller fragte nach der Verwendung von %sund %d.
Mark Dickinson
Übrigens printist der angezeigte Code in Python 3.5.1 ungültig: ist eine Funktion in Python 3, keine Anweisung.
Mark Dickinson
Ich habe den Beitrag bearbeitet ... bitte sehen Sie es. Eigentlich habe ich es als Alternative gepostet. Wenn jemand% d oder% s vermeiden könnte. Und danke für die Fehlererkennung, ..Ich habe den Code bearbeitet.
Sujatha
3
Danke für die Änderungen. Leider ist dies immer noch keine Antwort auf die Frage.
Mark Dickinson
2

% s wird verwendet, um Platz für Zeichenfolge zu halten.% d wird verwendet, um Platz für Zahlen zu halten

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

Programmausgabe

In diesem Video geht es um diesen Tipp https://www.youtube.com/watch?v=4zN5YsuiqMA

Noel Moses Mwadende
quelle
Willkommen bei Stack Overflow! Wie unterscheidet sich Ihre Antwort von den anderen 12?
Vasil Velichkov
Fast dieses Format funktioniert genauso, aber ich wollte nur mehr Beispiele nennen, um das Verständnis zu
verbessern
Das ist großartig! Sie können Ihre Antwort verbessern, indem Sie die Programmausgabe als Text und nicht als Bild hinzufügen.
Vasil Velichkov
Vielen
1


Apropos ... Python3.6 wird mitgeliefert, f-stringswas die Formatierung erheblich vereinfacht!
Wenn Ihre Python-Version größer als 3.6 ist, können Sie Ihre Zeichenfolgen mit den folgenden Methoden formatieren:

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
quelle