Python String Formatting

(Sponsor) Inizia ad imparare Python con il tutorial gratuito Intro to Python di DataCamp. Impara la scienza dei dati completando sfide interattive di codifica e guardando video di istruttori esperti. Inizia ora!

Aggiornato il 07 gennaio 2020

Il metodo format() ti permette di formattare la stringa in qualsiasi modo tu voglia.

Sintassi: template.format(p1, p1, .... , k1=v1, k2=v2)

template è una stringa contenente codici di formato, il metodo format() usa il suo argomento per sostituire il valore di ogni codice di formato. Per esempio:

>>> 'Sam has {0} red balls and {1} yellow balls'.format(12, 31)

{0} e {1} sono codici di formato. Il codice di formato {0} è sostituito dal primo argomento di format() cioè 12, mentre {1} è sostituito dal secondo argomento di format() cioè 31.

Expected Output:

Sam has 12 red balls and 31 yellow balls

Questa tecnica va bene per una semplice formattazione ma cosa succede se vuoi specificare la precisione in un numero in virgola mobile? Per questo è necessario imparare di più sui codici di formato. Ecco la sintassi completa dei codici di formato.

Sintassi: {:}

Il type può essere usato con i codici di formato:

Codici di formato Descrizione
d per interi
f per numeri in virgola mobile
b per numeri binari
o per numeri ottali
x per numeri esadecimali ottali
s per stringa
e per la virgola mobile in formato esponente

I seguenti esempi renderanno le cose più chiare.

Esempio 1:

>>> "Floating point {0:.2f}".format(345.7916732)

Qui si specifica 2 cifre di precisione e f è usato per rappresentare il numero in virgola mobile.

Expected Output:

Floating point 345.79

Esempio 2:

12
>>> import math>>> "Floating point {0:10.3f}".format(math.pi)

Qui si specifica 3 cifre di precisione, 10 per la larghezza e f per il numero in virgola mobile.

Expected Output:

Floating point 3.142

Esempio 3:

"Floating point pi = {0:.3f}, with {1:d} digit precision".format(math.pi, 3)

Qui d in {1:d} rappresenta il valore intero.

Expected Output:

Floating point pi = 3.142, with 3 digit precision

È necessario specificare la precisione solo in caso di numeri in virgola mobile, se si specifica la precisione per l’intero ValueError sarà sollevato.

Esempio 5:

'Sam has {1:d} red balls and {0:d} yellow balls'.format(12, 31)

Expected Output:

Sam has 31 red balls and 12 yellow balls

Esempio 6:

"In binary 4 is {0:b}".format(4) # b for binary, refer to Fig 1.1

Expected Output:

In binary 4 is 100

Esempio 7:

12
array = "A = {0}, B = {1}, C = {2}".format(*array)

Expected Output:

A = 34, B = 66, C = 12

Esempio 8:

123456
d = {'hats' : 122,'mats' : 42}"Sam had {hats} hats and {mats} mats".format(**d)

Expected Output:

Sam had 122 hats and 42 mats

Il metodo format() supporta anche le parole chiave.

'Sam has {red} red balls and {green} yellow balls'.format(red = 12, green = 31)

Nota mentre usi argomenti di parole chiave abbiamo bisogno di usare argomenti dentro {} non indice numerico.

Puoi anche mischiare argomenti di posizione con argomenti di parole chiave

12
'Sam has {red} red balls, {green} yellow balls \and {0} bats'.format(3, red = 12, green = 31)

Il metodo format() di formattazione delle stringhe è abbastanza nuovo ed è stato introdotto in Python 2.6 . C’è un’altra vecchia tecnica che vedrete nei codici legacy che vi permette di formattare la stringa usando l’operatore % invece del metodo format().

Facciamo un esempio.

"%d pens cost = %.2f" % (12, 150.87612)

Qui stiamo usando la stringa template a sinistra di %. Invece di {} per i codici di formato stiamo usando %. A destra di % usiamo una tupla per contenere i nostri valori. %d e %.2f sono chiamati come specificatori di formato, iniziano con % seguito dal carattere che rappresenta il tipo di dati. Per esempio %d specificatore di formato è un segnaposto per un intero, allo stesso modo %.2f è un segnaposto per un numero in virgola mobile.

Quindi %d è sostituito dal primo valore della tupla cioè 12 e %.2f è sostituito dal secondo valore cioè 150.87612.

Uscita prevista:

12 pens cost = 150.88

Alcuni esempi.

Esempio 1:

Nuovo:

"{0:d} {1:d} ".format(12, 31)

Vecchio:

"%d %d" % (12, 31)

Expected Output:

12 31

Esempio 2:

Nuovo:

"{0:.2f} {1:.3f}".format(12.3152, 89.65431)

Vecchio:

"%.2f %.3f" % (12.3152, 89.65431)

Uscita prevista:

12.32 89.654

Esempio 3:

Nuovo:

"{0:s} {1:o} {2:.2f} {3:d}".format("Hello", 71, 45836.12589, 45 )

Vecchio:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.