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


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

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


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

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


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


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'

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.


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 .



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

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


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.