You are here: Partenza > Dive Into Python > Elaborare HTML > Formattazione di stringhe basata su dizionario | << >> | ||||
Dive Into PythonPython per programmatori esperti |
La formattazione di stringhe permette di inserire facilmente dei valori all'interno delle stringhe. I valori sono elencati in una tupla ed inseriti ordinatamente nella stringa al posto dei vari marcatori per la formattazione. Per quanto questo approccio sia efficiente, non rende il codice molto semplice da leggere, specialmente se si stanno inserendo molti valori. Non potete semplicemente scorrere la stringa in un passaggio e capire quale sarà il risultato; dovete continuamente passare dalla stringa alla tupla di valori.
Esiste una forma alternativa per la formattazione di stringhe che usa i dizionari al posto delle tuple di valori.
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> "%(pwd)s" % params 'secret' >>> "%(pwd)s is not a good password for %(uid)s" % params 'secret is not a good password for sa' >>> "%(database)s of mind, %(database)s of body" % params 'master of mind, master of body'
Quindi perché dovreste usare la formattazione basata su dizionario? Beh, sembra una perdita di tempo impostare un dizionario solo per formattare una stringa nella riga successiva; è davvero molto più utile quando già avete un dizionario significativo. Come locals.
def handle_comment(self, text): self.pieces.append("<!--%(text)s-->" % locals())
def unknown_starttag(self, tag, attrs): strattrs = "".join([' %s="%s"' % (key, value) for key, value in attrs]) self.pieces.append("<%(tag)s%(strattrs)s>" % locals())
Quando questo metodo è chiamato, attrs è una lista di
tuple chiave/valore, come gli items di
un dizionario, il che vuol dire che possiamo usare un
assegnamento multi-variabile
per scorrerlo. Dovrebbe essere un meccanismo familiare oramai, ma ci sono
molte cose da evidenziare, quindi analizziamole singolarmente:
|
|
Ora, usando una formattazione di stringhe basata su dizionario, inseriamo il valore di tag e strattrs nella stringa. Così, se tag è 'a', il risultato finale è '<a href="index.html" title="Go to home page">', ed è ciò che viene aggiunto a self.pieces. |
Usare una formattazione di stringhe basata su dizionari con locals è un modo conveniente per ottenere una formattazione di stringhe complessa in maniera più leggibile, ma ha un prezzo. C'è una minima perdita di performance nell'effettuare una chiamata a locals, in quanto locals costruisce una copia dello spazio dei nomi locale. |
<< locals e globals |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
Virgolettare i valori degli attributi >> |