2.3.6.2 Operazioni sulla formattazione delle stringhe

Le stringhe e gli oggetti Unicode hanno un'unica operazione built-in; l'operatore % (modulo). Questo è anche conosciuto come formattatore di stringhe o operatore di interpolazione di stringhe. Fornendo dei valori formato % valori (dove formato è una stringa o un oggetto Unicode), le specifiche di conversione % in formato vengono sostituite con zero o più elementi di valori. L'effetto è simile a quello di sprintf() nel linguaggio C. Se formato è un oggetto Unicode, o se ognuno degli oggetti è stato convertito usando la conversione %s degli oggetti Unicode, anche il risultato sarà un oggetto Unicode.

Se formato richiede un singolo argomento, valori potrebbe essere un singolo oggetto non tupla.2.8 Altrimenti, valori deve essere una tupla con l'esatto numero di elementi specificato dal formato della stringa, o un singolo oggetto mappato (per esempio un dizionario).

Uno specificatore di conversione contiene due o più caratteri ed ha i seguenti componenti, che devono presentarsi in quest'ordine :

  1. Il carattere "%", che segna l'inizio dello specificatore.
  2. La chiave di mappatura (facoltativa), consistente in una sequenza di caratteri racchiusi tra parentesi tonde (per esempio, (nomeacaso)).
  3. Opzioni di conversione (facoltativo), che influenzano il risultato di alcuni tipi di conversione.
  4. Campo di larghezza minima (facoltativo). Se specificato con un "*" (asterisco), la larghezza attuale viene letta dal prossimo elemento della tupla in valori, e l'oggetto da covertire viene dopo il campo di larghezza minima, e precisione facoltativa.
  5. Precisione (facoltativo), viene fornita come un "." (punto) seguito dalla precisione. Se specificato come "*" (un asterisco), la larghezza attuale viene letta dall'elemento successivo della tupla in valori, ed il valore da convertire viene dopo la precisione.
  6. Modificatore di lunghezza (facoltativo).
  7. Tipo conversione.

Quando l'argomento è un dizionario (o un'altro tipo di mappatura), la formattazione nella stringa deve includere, tra parentesi, una chiave del dizionario, inserita immediatamente dopo il carattere "%". La chiave di mappatura seleziona il valore che deve essere formattato dalla mappatura. Per esempio:

>>> print '%(language)s has %(#)03d quote types.' % \
          {'language': "Python", "#": 2}
Python has 002 quote types.

In questo caso nessuno specificatore * può essere trovato nella formattazione (poiché richiede una lista di parametri sequenziali).

Le opzioni di conversione sono:

Opzione  Significato 
# Il valore di conversione userà l'``alternate form'' (dove definito piu` avanti).
0 La conversione riempirà di zeri, per valori numerici.
- Il valore convertito viene sistemato a sinistra (sovrascrivendo la conversione "0" se vengono forniti entrambi).
  (uno spazio) Uno spazio bianco dovrebbe essere lasciato prima di un numero positivo (o una stringa vuota) prodotto da una conversione con segno.
+ Un carattere segno ("+" o "-") precederà la conversione (sovrascrivendo l'opzione "space").

Il modificatore di lunghezza può essere h, l, e L può essere presente, ma viene ignorato come non necessario per Python.

I tipi di conversione sono:

Conversione  Significato  Note 
d Numero intero decimale con segno.  
i Numero intero decimale con segno.  
o Ottale senza segno. (1)
u Decimale senza segno.  
x Esadecimale senza segno (minuscolo). (2)
X Esadecimale senza segno (maiuscolo). (2)
e Numero in virgola mobile, in formato esponenziale (minuscolo).  
E Numero in virgola mobile, in formato esponenziale (maiuscolo).  
f Decimale in virgola mobile.  
F Decimale in virgola mobile.  
g Lo stesso di "e" se l'esponente è più grande di -4 o minore della precisione, "f" altrimenti.  
G Lo stesso di "E" se l'esponente è più grande di -4 o minore della precisione, "F" altrimenti.  
c Carattere singolo (accetta interi o stringhe di singoli caratteri).  
r Stringa (converte ogni oggetto Python usando repr()). (3)
s Stringa (converte ogni oggetto Python usando str()). (4)
% Nessun argomento viene convertito, riporta un carattere "%" nel risultato.  

Note:

(1)
La forma alternativa ottiene il risultato di inserire uno zero iniziale ("0"), fra il riempimento di sinistra e la formattazione del numero, se il primo carattere del risultato non è già uno zero.
(2)
La forma alternativa ottiene il risultato di inserire un iniziale '0x' o '0X' (dipendente da quale tra i formati "x" o "X" sia stato usato) tra la parte sinistra e la formattazione del numero, se il carattere iniziale del risultato non è già zero.
(3)
La conversione %r venne aggiunta in Python 2.0.
(4)
Se l'oggetto o la formattazione fornita è una stringa unicode, la stringa risultante sarà anch'essa unicode.

Poiché le stringhe Python hanno una lunghezza esplicita, le conversioni %s non assumono che '\0' sia la fine della stringa.

Per ragioni di sicurezza, le precisioni in virgola mobile vengono bloccate a 50; le conversioni %f per i numeri di valore assoluto oltre 1e25 vengono sostituite da conversioni %g. 2.9Tutti gli altri errori sollevano eccezioni.

Operazioni ulteriori sulle stringhe vengono definite nei moduli standard string e re.



Footnotes

... tupla.2.8
Per formattare soltanto una tupla dovreste fornire una tupla singleton il cui unico elemento sia la tupla da formattare.
...%g. 2.9
Questi numeri sono ragionevolmente arbitrari. Vengono intesi per evitare di stampare serie infinite di cifre insignificanti senza impedirne l'uso corretto e senza dover conoscere con precisione i valori della virgola mobile su una macchina particolare.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.