
Il metodo format() in Python
In questa guida ti parlo di format(), un metodo molto utile in Python perché ti permette di formattare stringhe in modo più leggibile e flessibile.
str.format(x)
Dove l'oggetto "str" è una stringa contenente dei segnaposto al suo interno, indicati da parentesi graffe {}.
L'argomento "x" è, invece, uno o più valori che vuoi inserire nella stringa. Separa gli argomenti tra loro con una virgola.
Il metodo format() sostituisce i segnaposto {} presenti nella stringa con i valori x che hai indicato.
A cosa serve? Questo metodo è essenziale per creare stringhe formattate in Python. Ti permette di costruire una stringa in cui alcune parti rimangono fisse, mentre altre cambiano dinamicamente in base ai valori che inserisci. È come avere un modello di stringa flessibile, dove puoi inserire e modificare i dati a tuo piacimento senza alterare la struttura generale.
Un esempio pratico
Definisci questa stringa inserendo un segnaposto {} all'interno.
saluto = "Ciao, {}!"
Ora applica il metodo format() alla stringa, inserendo tra le parentesi tonde la stringa "mondo"
print(saluto.format("mondo"))
Il metodo sostituisce il segnaposto {} con il valore alfanumerico "mondo".
Il risultato finale in output è il seguente:
Ciao, mondo!
Formattazione con Indici
Quando utilizzi il metodo format() puoi usare degli indici all'interno delle parentesi graffe per specificare l'ordine dei valori.
Ad esempio, crea una stringa con due segnaposti numerati {0} e {1}
frase = "{1} e {0} sono due grandi scienziati."
Ora chiama il metodo format() con due argomenti, due stringhe separate tra loro da una virgola.
print(frase.format("Feynman", "Einstein"))
In questo caso Python sostituisce il primo indice {0} con il primo argomento "Feynman" e il secondo indice {1} con il secondo argomento "Einstein".
Il risultato finale è il seguente:
Einstein e Feynman sono due grandi scienziati.
Osserva come nella stringa formattata 'Einstein' compaia prima di 'Feynman', nonostante sia elencato come secondo argomento nella funzione format().
Questo avviene perché, all'interno della stringa, l'indice {1}, che si riferisce al secondo elemento, precede l'indice {0}.
In pratica, l'ordine di visualizzazione è determinato dalla posizione degli indici all'interno delle parentesi graffe, e non dall'ordine in cui gli argomenti sono forniti alla funzione.
Formattazione con le parole chiave
Puoi anche usare delle parole chiave nei segnaposto per rendere il codice più leggibile.
Ad esempio, definisci questa stringa:
frase = "{nome} ha vinto il premio Nobel per la {campo}."
In questo caso i segnaposto hanno un'etichetta ciascuno: {nome} e {campo}.
Ora chiama il metodo format() da questa stringa, passando come argomenti le etichette "nome" e "campo" con i valori che vuoi sostituire "Feynman" e "fisica".
print(frase.format(nome="Feynman", campo="fisica"))
Il metodo sostituisce i valori "Feynman" e "fisica" alle rispettive etichette {nome} e {campo} presenti nella stringa.
Quindi, il risultato finale è il seguente:
Feynman ha vinto il premio Nobel per la fisica.
L'ordine di visualizzazione è determinato dalla posizione delle etichette all'interno delle parentesi graffe, e non dall'ordine in cui gli argomenti sono passati al metodo.
Eventualmente, puoi anche combinare le parole chiave con gli indici o i segnaposto generici.
frase = "{0} ha vinto il premio Nobel per la {campo}."
print(frase.format("Feynman", campo="fisica"))
Feynman ha vinto il premio Nobel per la fisica.
Tuttavia, in questo caso ricorda di passare prima i valori dei segnaposti senza parola chiave, altrimenti Python restituisce un errore.
Ad esempio, in questa stringa va passato prima il valore senza keyword "fisica" e poi quello con la keyword nome="Feynman".
frase = "{nome} ha vinto il premio Nobel per la {}."
print(frase.format("fisica",nome="Feynman))
Feynman ha vinto il premio Nobel per la fisica.
La formattazione dei valori di un dizionario
Il metodo format() ti permette anche la formattazione delle stringhe usando le chiavi di un dizionario.
Ad esempio, definisci un dizionario come segue:
info_scienziato = {
"nome": "Richard Feynman",
"campo": "Fisica",
}
Ora, crea una frase che utilizzi questi dati usando str.format() e riferendoti direttamente alle chiavi del dizionario.
frase = "{nome} ha vinto il premio Nobel per la {campo}"
print(frase.format(**info_scienziato))
L'operatore ** prima del nome del dizionario "info_scienziato" è usato per "scompattare" il dizionario.
Questo significa che ogni coppia chiave-valore nel dizionario viene passata come un argomento separato alla funzione format()
Il risultato in output è il seguente:
Feynman ha vinto il premio Nobel per la fisica.
In questo modo, puoi facilmente inserire informazioni da un dizionario in una stringa formattata in Python.
La formattazione di una sequenza
E' anche possibile formattare una sequenza.
Ad esempio, definisci una lista oppure una tupla.
stringa='{1} usa {0[1]}'
output=stringa.format(('C++', 'Python'), 'Tom')
print(output)
Questo script usa il metodo format() per inserire i valori della tupla nei segnaposto.
Quando viene richiamato il primo parametro {0[1]} si riferisce al secondo elemento della tupla ossia "Python", perché è indicato l'indice [1].
Tom usa Python
In questo caso, però, ricorda di non usare gli indici negativi come [-1] perché restituiscono un errore.
La formattazione dei numeri
Il metodo str.format() può essere usato per formattare valori numerici.
Ad esempio, puoi usarlo per controllare il numero di cifre decimali di un numero.
numero = "Pi greco è approssimativamente {0:.2f}"
In questo caso il segnaposto {0: 2f} indica che il valore da stampare è un numero in virgola mobile con due cifre decimali.
Ora chiama il metodo format() dalla stringa passandogli il valore 3.14159 come argomento.
print(numero.format(3.14159))
Il metodo format arrotonda il numero 3.14159 a due cifre decimali 3.14.
Quindi, il risultato in output è il seguente:
Pi greco è approssimativamente 3.14
L'allineamento e la spaziatura
Il metodo format() ti permette anche di allineare il testo e gestire la spaziatura.
Ad esempio, definisci questa stringa.
testo = "| {:<10} | {:^10} | {:>10} |"
In questo caso il simbolo "<" allinea a sinistra, il simbolo "^" centra e il simbolo ">" allinea a destra.
Il valore "10" indica che il segnaposto deve contenere 10 caratteri.
Adesso chiama il metodo format() passando tre stringhe come argomenti: "Rome", "Paris", "London".
print(testo.format("Rome", "Paris", "London"))
La prima stringa "Rome" viene allineata a sinistra, la seconda "Paris" al centro e la terza "London" a destra.
|Rome | Paris | London|
Questo ti permette di inserire e formattare valori in stringhe in modo più ordinato, rendendo il tuo codice molto più leggibile.