Il formato che userai davvero
Le f-string sono il modo standard con cui il codice Python moderno inserisce valori nel testo. Metti una f davanti alla virgoletta di apertura, e tutto ciò che sta dentro {...} diventa un'espressione viva:
Tre cose da notare. Il prefisso f trasforma l'intero letterale in un modello. Le graffe sono i punti di sostituzione. E l'espressione tra le graffe viene valutata nel momento in cui viene eseguito print, non quando è stata scritta la stringa.
Scriverai f-string molto più spesso di qualsiasi altro stile di formattazione. Sono più brevi di "Hello, " + name + ".", più chiare di "Hello, %s." % name e più flessibili di .format().
Dentro ci va tutto ciò che si può valutare
Le graffe non sono limitate ai nomi di variabile. Qualsiasi espressione Python va bene:
Chiamate di metodi, indici, aritmetica, espressioni condizionali: va tutto bene. L'unica regola: tieni corto quello che sta tra le graffe. Se stai scrivendo un calcolo di tre righe dentro un segnaposto, calcolalo prima in una variabile con un nome e inserisci quella.
Formattare i numeri
I due punti dopo l'espressione aprono una specifica di formato, un mini linguaggio per controllare come viene mostrato il valore:
Una guida veloce a cosa fa ogni pezzo:
.2f: float, due cifre dopo il punto. Arrotonda per la visualizzazione.,: virgola come separatore delle migliaia. Funziona con int e float..1%: moltiplica per 100 e aggiunge%. Ottimo per rapporti e tassi..2e: notazione scientifica con due cifre decimali.
Puoi combinarli. f"{total:,.2f}" dà "1,234.57".
Riempimento, larghezza e allineamento
Per allineare colonne di output:
<10 significa "allinea all'inizio, riempiendo fino ad almeno 10 caratteri". >5 significa "allinea alla fine, riempiendo fino a 5". Puoi anche usare ^ per centrare.
Per riempire con qualcosa di diverso dagli spazi, metti il carattere di riempimento prima del simbolo di allineamento:
Formattare le date
La stessa sintassi {value:spec} funziona con gli oggetti datetime:
La specifica dopo i due punti è una stringa di formato di strftime. Qui funziona ogni codice % disponibile per strftime: li vedremo nel dettaglio nella pagina su datetime.
Il trucco dell'= per il debug
Una delle funzionalità di nicchia più utili: metti = dopo l'espressione e Python stampa sia il testo dell'espressione sia il suo valore:
Ottieni count=7, price=19.99, count * price=139.93. È un intero print("count =", count) in tre caratteri. Vale la pena ricordarlo la prossima volta che fai debug e vuoi stampare qualche valore.
Scrivere graffe letterali
Se ti serve una { o una } letterale nell'output, raddoppiala:
Le graffe singole aprono un'espressione; {{ e }} diventano { e } nell'output.
f-string su più righe
Le f-string funzionano bene con le virgolette triple, cosa utile quando costruisci piccoli modelli al volo:
Puoi anche spezzare una f-string lunga in più letterali stringa adiacenti: Python li concatena in automatico:
Quando saltano ancora fuori i vecchi stili
Nel codice esistente incontrerai due stili di formattazione più vecchi:
Tutti e tre producono lo stesso output. Nove volte su dieci le f-string vincono in leggibilità. Ricorri a .format() quando devi costruire un modello una volta e applicarlo molte volte; usa % solo quando mantieni codice vecchio che lo usa già.
A cosa non servono
Due situazioni richiedono uno strumento diverso.
Costruire query SQL. Non inserire mai l'input dell'utente in una stringa SQL con una f-string. Usa le query parametrizzate della tua libreria per il database. Una f-string in quel punto è proprio il modo in cui nasce una SQL injection.
Costruire testi dell'interfaccia da tradurre. Se la tua app supporta più lingue, ti serve un modello che gli strumenti di traduzione esterni possano raccogliere: di solito _(...) di gettext o un helper specifico del framework. Una f-string incorpora la struttura nel codice sorgente, il che rende la traduzione molto più difficile.
Per tutto il resto (log, output nella console, costruzione di URL, stringhe di configurazione, formattazione di numeri da mostrare) le f-string sono la risposta giusta.
Prossimo argomento: numeri e booleani
Le f-string lavorano moltissimo per formattare numeri, quindi conviene conoscere un po' più a fondo i tipi numerici. Ecco il prossimo argomento.
Domande frequenti
Cos'è una f-string in Python?
Una f-string è un letterale stringa preceduto da f, in cui tutto ciò che sta dentro {...} viene sostituito durante l'esecuzione con il valore dell'espressione. f"Hello, {name}" inserisce nella stringa il valore attuale di name.
Quando sono state introdotte le f-string in Python?
Con Python 3.6. Tutte le versioni moderne di Python le supportano, quindi oggi puoi usare le f-string ovunque scrivi codice Python 3. Gli stili di formattazione più vecchi (% e .format()) funzionano ancora, ma nella maggior parte dei casi si leggono peggio.
Come formatto un numero con 2 decimali in Python?
Usa una specifica di formato dopo i due punti dentro le graffe: f"{price:.2f}". .2f significa 'float con due cifre dopo il punto decimale'. Arrotonda il valore mostrato; il numero originale non cambia.
Posso mettere qualsiasi espressione dentro una f-string?
Sì: aritmetica, chiamate di metodi e di funzioni, espressioni condizionali. f"{name.upper()}" e f"{price * 1.2:.2f}" funzionano entrambe. Tieni le espressioni brevi; se il codice tra le graffe si complica, calcolalo prima in una variabile.