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.

if __name__ == "__main__":<br />

Algunas observaciones antes de que empiece lo bu<strong>en</strong>o. Primero, no se necesitan<br />

paréntesis que <strong>en</strong>cierr<strong>en</strong> la expresión de if. Segundo, la s<strong>en</strong>t<strong>en</strong>cia if termina<br />

con dos puntos, y va seguida por código sangrado.<br />

Al igual que C, <strong>Python</strong> utiliza == para la comparación y = para la<br />

asignación. Al contrario que C, <strong>Python</strong> no permite la asignación embebida,<br />

de manera que no existe la posibilidad de asignar un valor accid<strong>en</strong>talm<strong>en</strong>te<br />

donde deseaba hacer una comparación.<br />

De manera que... ¿por qué es un truco esta s<strong>en</strong>t<strong>en</strong>cia if <strong>en</strong> particular? Los<br />

módulos son objetos y todos los módulos ti<strong>en</strong><strong>en</strong> un atributo llamado __name__.<br />

El valor del __name__ de un módulo dep<strong>en</strong>de de cómo esté usándolo. Si importa<br />

el módulo, <strong>en</strong>tonces __name__ es el nombre del fichero del módulo, sin el<br />

directorio de la ruta ni la ext<strong>en</strong>sión del fichero. Pero también puede ejecutar el<br />

módulo directam<strong>en</strong>te como si fuera un programa, <strong>en</strong> cuyo caso __name__ t<strong>en</strong>drá<br />

un valor especial predefinido, __main__.<br />

>>> import odbchelper<br />

>>> odbchelper.__name__<br />

'odbchelper'<br />

Sabi<strong>en</strong>do esto, puede diseñar una batería de pruebas para su módulo d<strong>en</strong>tro del<br />

propio módulo situándola d<strong>en</strong>tro de esta s<strong>en</strong>t<strong>en</strong>cia if. Cuando ejecuta el<br />

módulo directam<strong>en</strong>te, __name__ es __main__, de manera que se ejecutan las<br />

pruebas. Cuando importa el módulo, __name__ es otra cosa, de manera que se<br />

ignoran las pruebas. Esto hace más s<strong>en</strong>cillo desarrollar y depurar nuevos<br />

módulos antes de integrarlos <strong>en</strong> un programa mayor.<br />

En Mac<strong>Python</strong>, hay que dar un paso adicional para hacer que funcione el<br />

truco if __name__. Muestre el m<strong>en</strong>ú de opciones pulsando el triángulo

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

Saved successfully!

Ooh no, something went wrong!