21.04.2013 Views

Inmersión en Python Inmersión en Python - iPereda

Inmersión en Python Inmersión en Python - iPereda

Inmersión en Python Inmersión en Python - iPereda

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

que no lo hizo. Lo mejor de las pruebas unitarias es que le da la libertad de<br />

refactorizar sin piedad.<br />

La refactorización es el proceso de tomar código que funciona y hacer que<br />

funcione mejor. Normalm<strong>en</strong>te “mejor” significa “más rápido”, aunque puede<br />

significar también que “usa m<strong>en</strong>os memoria” o “usa m<strong>en</strong>os espacio <strong>en</strong> disco” o<br />

simplem<strong>en</strong>te “es más elegante”. Indep<strong>en</strong>di<strong>en</strong>tem<strong>en</strong>te de lo queu signifique para<br />

usted, su proyecto, <strong>en</strong> su <strong>en</strong>torno, la refactorización es importante para la salud<br />

a largo plazo de cualquier programa.<br />

Aquí, “mejor” significa “más rápido”. Específicam<strong>en</strong>te, la función fromRoman es<br />

más l<strong>en</strong>ta de lo que podría ser debido a esa expresión regular tan grande y fea<br />

que usamos para validar los números romanos. Probablem<strong>en</strong>te no merece la<br />

p<strong>en</strong>a eliminar completametne las expresiones regulares (sería difícil, y podría<br />

acabar por no ser más rápido), pero podemos acelerar la función compilando la<br />

expresión regular previam<strong>en</strong>te.<br />

Ejemplo 15.10. Compilación de expresiones regulares<br />

>>> import re<br />

>>> pattern = '^M?M?M?$'<br />

>>> re.search(pattern, 'M')<br />

<br />

>>> compiledPattern = re.compile(pattern)<br />

>>> compiledPattern<br />

<br />

>>> dir(compiledPattern)<br />

['findall', 'match', 'scanner', 'search', 'split', 'sub', 'subn']<br />

>>> compiledPattern.search('M')<br />

<br />

Ésta es la sintaxis que ha visto anteriorm<strong>en</strong>te: re.search toma una expresión<br />

regular como una cad<strong>en</strong>a (pattern) y una cad<strong>en</strong>a con la que compararla<br />

('M'). Si el patrón coincide, la función devuelve un objeto al que se le puede<br />

preguntar para saber exactam<strong>en</strong>te qué coincidió y cómo.<br />

Ésta es la nueva sintaxis: re.compile toma una expresión regular como

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!