El Blog de Trespams

Blog personal sobre tecnologia, gestió de projectes i coses que se me passen pel cap

Plantilles a Python

Python te un sistema de tractament de cadenes molt potent i a la vegada molt entenidor. Una de les necessitats que tot programador té és el de muntar missatges més o manco estandaritzats en que sols varien uns pocs paràmetres.

Per exemple, suposem que tenim una llista de noms i edats, per seguir amb els exemples típic suposarem

agenda = [('Benjamí', 31), ('Pau', 22), ('Juan',34), ('Ricardo',38),('Guillem',28), ('Bernat',58)]

i volem construir amb cada un d'ells una frase del tipus: Benvolgut [nom] ara que ja tens [edat] anys ...

Una primera opció és la de fer servir l'operació de formateig de cadenes a Python amb la qual cosa podríem escriure un codi semblant a

for persona in agenda: ···print "Benvolgut %s ara que ja tens %i anys" % persona

que ens donaria com a resultat

Benvolgut Benjamí ara que ja tens 31 anys Benvolgut Pau ara que ja tens 22 anys Benvolgut Juan ara que ja tens 34 anys Benvolgut Ricardo ara que ja tens 38 anys Benvolgut Guillem ara que ja tens 28 anys Benvolgut Bernat ara que ja tens 58 anys

Les opcions de formateig de cadenes esperen una llista i substituexien cada paràmetre que tenim a la cadena per l'element de la llista corresponent. Això és suficient per la majoria de casos en que ens trobarem, però la cosa és que no queda massa documentat què és cada paràmetre, i per això Python ens deixa posar nom als paràmetres de la cadena i passar enlloc d'una llista un diccionari, ara es substituirà cada paràmetre pel valor de la clau agafada del diccionari. L'exemple està agafat un tant pels pèls però seria:

for persona in agenda: ···print "Benvolgut %(nom)% ara que ja tens %(edat)i anys" % {'nom':persona[0],'edat':persona[1]} En la mateixa línia Python té a més una classe dins el paquet string anomenada Template que ens permet crear plantilles com a tals i fer-ne la substitució de paràmetres bé per nom o mitjançant un diccionari. En aquest cas l'esforç adicional de teclejar es veu compensat per un codi autodocumentat, per exemple

from string import Template plantilla = Template("Benvolgut ${nom} ara que ja tens ${edat} anys") for persona in agenda: ···print plantilla.substitute(nom=persona[0], edat = persona[1])

La potència de Template es veu quan hi ha molts de paràmetres, ja que es molt més senzill saber quan ens hem deixat un paràmetre, normalment per un nom mal posat i a més proporciona la funció safe_substitute, que genera la plantilla fins allà on pot i es molt útil a l'hora de depurar una plantilla amb una gran quantitat de paràmetres.

Si encara volem més, hi ha una gran quantitat de llenguatges de plantilles de tercers que podem utilitzar des de Python, en deix alguns enllaços:

L'elecció d'una alternativa u altre dependrà del que necessitem, i en el cas de les plantilles de tercers del si elegim un bastiment web o un altre, de si volem separar molt el codi de la capa de presentació o de si ens sentim més o menys còmodes amb la sintaxi d'XML per les plantilles.

blog comments powered by Disqus