Qual è la differenza tra% se% d nella formattazione della stringa Python?


Risposte:


185

Sono usati per formattare stringhe. %sfunge da segnaposto per una stringa mentre %dfunge da segnaposto per un numero. I loro valori associati vengono passati tramite una tupla usando l' %operatore.

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

stamperà marcog 42. Si noti che name è una stringa (% s) e number è un numero intero (% d per i decimali).

Vedi https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting per i dettagli.

In Python 3 l'esempio sarebbe:

print('%s %d' % (name, number))

2
In Google Chrome: Impostazioni >> Cerca >> Gestisci motori di ricerca ... nota come %sviene utilizzato con le configurazioni dei motori di ricerca. Chrome utilizza %sper sostituire le parole chiave inserite nella barra degli indirizzi. Python utilizza %sin modo simile. In print('description: %s' % descrip)l' %soperatore sarà sostituito dalla stringa di testo memorizzato nella descripvariabile. Le parentesi tonde impediscono un messaggio di errore in Python 3.
noobninja,

come si chiamano questi% s,% d, ecc?
Chaine,

1
@Chaine sono chiamati segnaposto, sono variabili sostituibili
Leo

@Leo Grazie!
Chaine,

37

da python 3 doc

%d è per intero decimale

%s è per stringa generica o oggetto e in caso di oggetto, verrà convertito in stringa

Considera il seguente codice

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

sarà messo fuori

giacomo 4.3 4 4.300000 4.3

come puoi vedere %dsi troncerà a numero intero, %smanterrà la formattazione, %fverrà stampato come float e %gverrà utilizzato per il numero generico

ovviamente

print('%d' % (name))

genererà un'eccezione; non è possibile convertire la stringa in numero


Questo richiede più voti. Spiega cosa accadrebbe se invece %sfosse usato per un numero.
Vikas Prasad,

1
Qual è la differenza tra% d e% i, se entrambi verranno convertiti in numeri interi? Come si confronta% d con% i e% f?
srini,

34

%s viene utilizzato come segnaposto per i valori di stringa che si desidera iniettare in una stringa formattata.

%d viene utilizzato come segnaposto per valori numerici o decimali.

Ad esempio (per python 3)

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

Uscirebbe

Joe is 42 years old

6
Non spiega davvero il problema? Non sto spiegando il problema, sto fornendo una risposta concisa alla domanda. La domanda ha chiesto specificamente a cosa servissero% se% d.
Soviet

2
conosci la differenza tra% i e% d? python supporta% i?
cryanbhu,

11

Questi sono segnaposto:

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

Questa riga di codice sostituirà% s con Alice (str) e% d con 42.

Produzione: 'Hi Alice I have 42 donuts'

Ciò potrebbe essere ottenuto con un "+" il più delle volte. Per comprendere meglio la tua domanda, potresti anche voler controllare {} / .format (). Ecco un esempio: formattazione della stringa Python:% vs. .format

vedi anche qui un video tutorial di Google Python @ 40 ', con alcune spiegazioni https://www.youtube.com/watch?v=tKTZoB2Vjuk


10

L' %de %sformattazione delle stringhe "comandi" vengono utilizzati per stringhe di formato. Il %dè per i numeri, e %sè per le stringhe.

Per un esempio:

print("%s" % "hi")

e

print("%d" % 34.6)

Per passare più argomenti:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) sarà di ritorno hi there user123456


9

Queste sono tutte risposte informative, ma nessuna è abbastanza al centro di quale sia la differenza tra %se %d.

%sdice al formatter di chiamare la str()funzione sull'argomento e dato che per definizione stiamo stringendo una stringa, %sessenzialmente sta semplicemente eseguendo str(arg).

%dd'altra parte, sta invocando int()l'argomento prima di chiamare str(), come str(int(arg)), Ciò causerà intcoercizione e strcoercizione.

Ad esempio, posso convertire un valore esadecimale in decimale,

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

o troncare un galleggiante.

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

Ma l'operazione genererà un'eccezione se l'argomento non è un numero.

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

Quindi, se l'intento è solo quello di chiamare str(arg), allora %sè sufficiente, ma se hai bisogno di una formattazione extra (come la formattazione di posizioni decimali float) o di altra coercizione, allora sono necessari gli altri simboli di formato.

Con la f-stringnotazione, quando si esce dal formatter, l'impostazione predefinita è 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'

Lo stesso vale con string.format; il valore predefinito è str.

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

8

%de %ssono segnaposto, funzionano come una variabile sostituibile. Ad esempio, se si creano 2 variabili

variable_one = "Stackoverflow"
variable_two = 45

puoi assegnare quelle variabili a una frase in una stringa usando una tupla delle variabili.

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

Nota che %sfunziona per String e %dfunziona per variabili numeriche o decimali.

se stampi variable_3sembrerebbe così

print(variable_3 % (variable_one, variable_two))

Stavo cercando una risposta in StackOverflow e ho trovato più di 45 risposte alla mia domanda.


5

Sono identificatori di formato. Vengono utilizzati quando si desidera includere il valore delle espressioni Python nelle stringhe, con un formato specifico applicato.

Vedi Dive in Python per un'introduzione relativamente dettagliata.



2

Nel caso in cui desideri evitare% s o% d, allora ..

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

Produzione:

my name is marcog and my name is 42

2
Che cosa ha a che fare questa risposta con la domanda? L'interrogante stava chiedendo sull'uso di %se %d.
Mark Dickinson,

A proposito, il codice che mostri non è valido in Python 3.5.1: printè una funzione in Python 3, non un'istruzione.
Mark Dickinson,

Ho modificato il post ... per favore, guardalo. In realtà, l'ho pubblicato come alternativa..se qualcuno potrebbe evitare di usare% d o% s. E grazie per il rilevamento degli errori, .. Ho modificato il codice.
Sujatha,

3
Grazie per le modifiche. Sfortunatamente, questa non è ancora una risposta alla domanda.
Mark Dickinson,

2

% s viene utilizzato per contenere lo spazio per la stringa% d viene utilizzato per contenere lo spazio per il numero

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

Uscita del programma

questo video approfondisce questo suggerimento https://www.youtube.com/watch?v=4zN5YsuiqMA


Benvenuto in Stack Overflow! In che modo la tua risposta è diversa dalle altre 12?
Vasil Velichkov,

quasi quel formato funziona allo stesso modo, ma tutto quello che volevo era dare più esempi in modo da aumentare la comprensione
Noel Moses Mwadende,

È fantastico! Puoi migliorare la tua risposta aggiungendo l'output del programma come testo e non come immagine.
Vasil Velichkov,

grazie per la tua preoccupazione, apporterò alcune modifiche, prego
Noel Moses Mwadende, il

1

parlando di quale ...
python3.6 viene fornito f-stringsche rende le cose molto più facili nella formattazione!
ora se la tua versione di Python è maggiore di 3.6 puoi formattare le tue stringhe con questi metodi disponibili:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.