2.12. Formattare le stringhe

Python supporta la formattazione dei valori nelle stringhe. Sebbene ciò possa comprendere espressioni molto complicate, il modo più semplice per utilizzarle consiste nell'inserire valori in una stringa attraverso l'istruzione %s.

Nota
La formattazione delle stringhe in Python utilizza la stessa sintassi della funzione C sprintf.

Esempio 2.29. Introduzione sulla formattazione delle stringhe

>>> k = "uid"
>>> v = "sa"
>>> "%s=%s" % (k, v) 1
'uid=sa'
1 L'intera espressione viene valutata come stringa. Il primo %s è rimpiazzato dal valore di k; il secondo %s è rimpiazzato dal valore di v. Tutti i restanti caratteri della stringa (in questo caso il simbolo uguale) rimangono invariati.

Notare che (k, v) è una tupla. Vi avevo detto che sarebbero servite a qualcosa.

Potreste pensare che questo sia un lavoro esagerato per realizzare una semplice concatenazione fra stringhe ed avete ragione, eccetto che la formattazione delle stringhe non riguarda solo la concatenazione. Non si tratta solo di formattazione, è anche coercizione di tipo.

Esempio 2.30. Formattazione delle stringhe contro concatenazione

>>> uid = "sa"
>>> pwd = "secret"
>>> print pwd + " is not a good password for " + uid      1
secret is not a good password for sa
>>> print "%s is not a good password for %s" % (pwd, uid) 2
secret is not a good password for sa
>>> userCount = 6
>>> print "Users connected: %d" % (userCount, )           3 4
Users connected: 6
>>> print "Users connected: " + userCount                 5
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
TypeError: cannot add type "int" to string
1 + è l'operatore che effettua la concatenazione fra le stringhe.
2 In questo banale esempio, la formattazione delle stringhe raggiunge lo stesso risultato della concatenazione.
3 (userCount, ) è una tupla con un solo elemento. Ebbene si, la sintassi è un po' anomala, ma esiste una buona ragione per questo: è una tupla che non lascia spazio ad ambiguità. In effetti, potete sempre includere una virgola dopo l'ultimo elemento quando definite liste, tuple o dizionari. Se la virgola non fosse richiesta, Python non potrebbe sapere se (userCount) sia una tupla con un solo elemento o semplicemente il valore di userCount.
4 La formattazione delle stringhe lavora con gli interi specificando %d al posto di %s.
5 La concatenazione di una stringa con una non-stringa solleva un'eccezione. A differenza della formattazione delle stringhe, la concatenazione delle stesse, funziona unicamente quando tutti i componenti sono già delle stringhe.

Ulteriori letture