Formattazione delle Stringhe
Scopri i tre modi per formattare le stringhe in Python — operatore %, str.format() e f-string — con esempi su numeri, allineamento e utilizzo pratico.
La formattazione delle stringhe è il modo in cui si incorporano valori di variabili nel testo. Python offre tre approcci: l'operatore legacy %, il versatile metodo str.format() e la moderna sintassi delle f-string introdotta in Python 3.6. Ognuno produce lo stesso risultato per i casi semplici, ma differiscono in potenza, leggibilità e nella versione di Python richiesta.
Questo capitolo tratta:
- L'operatore
%e i suoi codici di tipo str.format()con segnaposto posizionali, indicizzati e con parola chiave- Le f-string — espressioni inline e il specificatore di debug
= - Specificatori di formato: larghezza, allineamento, precisione e basi numeriche
- Come scegliere il metodo giusto per la propria situazione
Capitoli correlati: Stringhe Python · Concatenare Stringhe · Caratteri di Escape · Metodi delle Stringhe
L'Operatore %
L'operatore % è lo stile di formattazione delle stringhe più antico in Python, mutuato dal printf del linguaggio C. Si inseriscono codici di tipo nella stringa come segnaposto, quindi si forniscono i valori dopo il simbolo %.
Codici di tipo comuni
| Codice | Significato | Input di esempio | Output |
|---|---|---|---|
%s | String (o qualsiasi oggetto) | "Alice" | Alice |
%d | Intero | 42 | 42 |
%f | Float | 3.14 | 3.140000 |
%r | repr() dell'oggetto | "hi\n" | 'hi\n' |
Formattazione con %s e %d
My name is John and I am 30 years old.Quando si ha più di un valore, si passano in una tupla. I valori vengono abbinati ai segnaposto da sinistra a destra:
item = "coffee"
price = 2.50
qty = 3
print("Item: %s | Price: $%.2f | Qty: %d" % (item, price, qty))Item: coffee | Price: $2.50 | Qty: 3Il codice di formato %.2f arrotonda il float a 2 cifre decimali.
Quando usare %: Principalmente quando si lavora con codice molto vecchio o codebase Python 2. Per il nuovo codice, si preferisce str.format() o le f-string.
str.format()
Il metodo str.format() utilizza segnaposto con parentesi graffe {} ed è più flessibile di %. Supporta argomenti posizionali, riutilizzo basato su indice e argomenti con parola chiave.
Segnaposto Posizionali
Le parentesi graffe vuote {} vengono riempite da sinistra a destra con gli argomenti passati a format():
Formattazione delle stringhe con il metodo format in Python
My name is John and I am 30 years old.Segnaposto Basati su Indice
Si inserisce un numero all'interno delle parentesi graffe per selezionare un argomento specifico. Si può anche ripetere lo stesso argomento:
name = "John"
age = 30
print("{0} is {1} years old and {0} likes Python.".format(name, age))John is 30 years old and John likes Python.Segnaposto con Parola Chiave
Si usano nomi di parole chiave per la formattazione più leggibile. Questo consente anche di riordinare i valori indipendentemente dalla lista degli argomenti:
name = "John"
age = 30
print("{name} is {age} years old.".format(name=name, age=age))John is 30 years old.Si può spacchettare un dizionario direttamente con **:
person = {"name": "Alice", "city": "London"}
print("{name} lives in {city}.".format(**person))Alice lives in London.f-String (Python 3.6+)
Le f-string (letterali di stringa formattati) si scrivono aggiungendo il prefisso f o F alla stringa. Qualsiasi espressione all'interno di {} viene valutata in fase di esecuzione e convertita in una stringa. Sono l'opzione più veloce e leggibile per il codice Python moderno.
Formattazione delle stringhe con le f-string in Python
My name is John and I am 30 years old.Poiché le parentesi graffe possono contenere qualsiasi espressione Python valida, non si è limitati ai semplici nomi di variabili:
x = 10
y = 3
print(f"{x} divided by {y} is {x / y:.2f}")10 divided by 3 is 3.33Il Specificatore di Debug = (Python 3.8+)
Si aggiunge = dopo il nome della variabile per stampare sia il nome della variabile che il suo valore — molto utile per il debug rapido:
val = 42
result = val * 2
print(f"{val=}, {result=}")val=42, result=84Specificatori di Formato
Tutti e tre i metodi supportano un mini-linguaggio per controllare come vengono visualizzati i valori. La sintassi all'interno di {} per format() e le f-string è:
{[value]:[fill][align][sign][width][grouping][.precision][type]}Allineamento e Larghezza
Si usa < (sinistra), > (destra) o ^ (centro) con un numero di larghezza:
name = "John"
print(f"|{name:<10}|") # left-align in a field of width 10
print(f"|{name:>10}|") # right-align
print(f"|{name:^10}|") # center|John |
| John|
| John |Si può specificare un carattere di riempimento prima del simbolo di allineamento:
print(f"|{'hello':*^15}|") # fill with * and center|*****hello*****|Precisione Decimale
pi = 3.14159265
print(f"Pi is approximately {pi:.2f}") # 2 decimal places
print(f"Pi is approximately {pi:.4f}") # 4 decimal placesPi is approximately 3.14
Pi is approximately 3.1416Formattazione dei Numeri
price = 1234567.89
print(f"{price:,.2f}") # comma as thousands separator
print(f"{price:e}") # scientific notation1,234,567.89
1.234568e+06Per visualizzare un rapporto come percentuale, si usa il specificatore di tipo %:
ratio = 0.853
print(f"{ratio:.1%}")85.3%Basi degli Interi
x = 255
print(f"{x:d}") # decimal -> 255
print(f"{x:x}") # hex lower -> ff
print(f"{x:X}") # hex upper -> FF
print(f"{x:o}") # octal -> 377
print(f"{x:b}") # binary -> 11111111255
ff
FF
377
11111111Gli stessi specificatori funzionano con str.format():
print("{:b}".format(255)) # 11111111
print("{:x}".format(255)) # ffRiempimento con Zeri
Si riempie un intero a una larghezza fissa con zeri iniziali usando 0 prima della larghezza:
print(f"{42:010d}") # zero-pad to 10 digits0000000042Scegliere il Metodo Giusto
| Situazione | Scelta migliore |
|---|---|
| Python 3.6 o versioni successive | f-string |
| Deve supportare Python 2 | Operatore % |
| Riutilizzare la stessa stringa template | str.format() con una variabile |
| Costruire template in fase di esecuzione | str.format() |
| Stampa di debug rapida | f-string con specificatore = |
| Vecchio codebase da mantenere | Rispettare lo stile già usato |
Le f-string sono il default raccomandato per tutto il nuovo codice Python 3. Sono più veloci di str.format() (nessun overhead da chiamata di metodo) e più leggibili di %.