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.