| You are here: Inicio > Inmersión en Python > Procesamiento de HTML > Cadenas de formato basadas en diccionarios | << >> | ||||
Inmersión en PythonPython de novato a experto |
|||||
¿Por qué le he enseñado que existen locals y globals? Para que pueda aprender a dar formato a cadenas usando diccionarios. Como recordará, la cadena de formato normal proporciona una manera sencilla de insertar valores en cadenas. Los valores se listan en una tupla y se insertan por orden en la cadena en lugar de cada marcador de formato. Aunque esto es eficiente, no siempre produce el código más fácil de leer, especialmente cuando ha de insertar múltiples valores. No se puede simplemente echar un vistazo a la cadena y comprender cual será el resultado; alternará constantemente entre leer la cadena y la tupla de valores.
Hay una forma alternativa de dar formato a cadenas que usa diccionarios en lugar de tuplas de valores.
>>> 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'
Así que, ¿por qué usar una cadena de formato con diccionario? Bien, parece matar moscas a cañonazos construir un diccionario de claves y valores sólo para dar formato a una cadena en la siguiente línea; es mucho más útil cuando resulta que ya tiene un diccionario lleno de claves significativas con sus respectivos valores. Como 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())
Cuando se invoca este método, attrs es una lista
de tuplas clave/valor igual que los items de un diccionario, lo que
significa que puede usar la asignación multivariable para
iterar sobre ella. Este patrón debería resultarle familiar ya, pero se
está haciendo mucho aquí, así que vamos a hacer una disección:
|
|
| Ahora insertará el valor de tag y strattrs en una cadena usando la cadena de formato basada en diccionarios. De manera que si tag es 'a', el resultado final será '<a href="index.html" title="Go to home page">', y eso es lo que se agrega a self.pieces. |
| Usar cadenas de formato basadas en diccionarios con locals es una manera conveniente de hacer más legibles expresiones de cadenas de formato, pero tiene un precio. Llamar a locals tiene una ligera influencia en el rendimiento, ya que locals construye una copia del espacio de nombres local. | |
<< locals y globals |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
Poner comillas a los valores de los atributos >> |