Módulos Introducción a PYTHON Cesar Husillos & Vı́ctor Terrón IAA-CSIC Abril de 2014 Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 1 / 59 Índice 1 2 3 4 5 6 7 8 9 Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Overview Organización Reutilización ¿Cómo se crean los módulos? ¿Cómo se usan los módulos? Espacios de Nombres Declaración y Ejecución Paso de parámetros al módulo Notas finales Módulos Abril de 2014 2 / 59 Overview Índice 1 2 3 4 5 6 7 8 9 Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Overview Organización Reutilización ¿Cómo se crean los módulos? ¿Cómo se usan los módulos? Espacios de Nombres Declaración y Ejecución Paso de parámetros al módulo Notas finales Módulos Abril de 2014 3 / 59 Overview Módulos Overview: ¿Qué son? Un módulo es un fichero que contiene codigo PYTHON. Su extensión es .py. Almacena declaración de variables e implementación de funciones. Posibilidad de hacer referencia a otros módulos (mediante la instrucción import). Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 4 / 59 Overview Módulos Overview: ¿Para qué sirven? La función principal es organizar el código. Como resultado: 1 Nuestra mamá se sentirá orgullosa de nosotros (“¡Qué lı́mpi@ y ordenad@ es mi niñ@!” ©) 2 Será mucho mas sencillo reutilizar nuestro código. Podremos publicar nuestro código para que lo use cualquiera!! Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 5 / 59 Overview Módulos Overview: Ejemplo de modulo (areas.py) """ Modulo para el calculo de areas de formas basicas """ pi = 3.1416 def cuadrado ( lado ): """ Calcula el area del c u a d r a d o a partir de su lado """ return lado ** 2 def circulo ( radio ): """ Calcula el area del circulo dado el radio """ return pi * radio ** 2 print ’ Area cuadrado = ’ , cuadrado (2) print ’ Area circulo = ’ , circulo (1) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 6 / 59 Overview Módulos Overview: ¿Cómo se usan? Pueden ser ejecutados desde consola python areas.py Pueden ser “llamados” por otros módulos o desde la consola de PYTHON, mediante la instrucción import areas En la importación, se escribe el nombre del fichero sin el .py. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 7 / 59 Overview Módulos Overview: ¿Cómo se usan? Se obtiene información sobre el contenido del módulo mediante la instrucción help(areas) Se accede a su contenido con la sintaxis nombreModulo.variable o nombreModulo.funcion print areas.pi; print areas.cuadrado(3) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 8 / 59 Organización Índice 1 2 3 4 5 6 7 8 9 Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Overview Organización Reutilización ¿Cómo se crean los módulos? ¿Cómo se usan los módulos? Espacios de Nombres Declaración y Ejecución Paso de parámetros al módulo Notas finales Módulos Abril de 2014 9 / 59 Organización Módulos Organización del código Todo empieza por programas simples (unas pocas lı́neas, como mucho). A medida que se aprende sobre PYTHON, la complejidad de los programas aumenta. El número de lı́neas pasa de decenas a cientos, y el programa se vuelve “difı́cil” de revisar. El problema se magnifica si usamos el programa de otra persona o si el desarrollo se realiza entre varias. La gente lleva mucho tiempo programando y este problema no es nuevo. ¿Cómo se resuelve? Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 10 / 59 Organización Módulos Organización del código (II) La tendencia normal es la de dividir el código complejo en partes (funciones o módulos). Éstas piezas o fragmentos de código se gestionan de forma independiente (programación, pruebas, mejoras,...) y luego se juntan en programas más complejos. Esto mismo es lo que aprenderemos en esta parte del curso de PYTHON. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 11 / 59 Reutilización Índice 1 2 3 4 5 6 7 8 9 Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Overview Organización Reutilización ¿Cómo se crean los módulos? ¿Cómo se usan los módulos? Espacios de Nombres Declaración y Ejecución Paso de parámetros al módulo Notas finales Módulos Abril de 2014 12 / 59 Reutilización Módulos Reutilización En nuestro trabajo diario, nuestras tareas se centran en temas concretos. Desarrollamos código para resolver un problema. Se plantea otro diferente y nos damos cuenta de que nuestro programa se parece a parte de otro que ya hemos hecho antes. ¿Trabajamos 2 veces? Si colocamos nuestro código en módulos, podemos 1 Aprovechar lo que ya está hecho (no reinventar la rueda). 2 Saber que lo que usamos funciona (ya probado). Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 13 / 59 Reutilización Módulos ¿Cuánto hay desarrollado? Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 14 / 59 ¿Cómo se crean los módulos? Índice 1 2 3 4 5 6 7 8 9 Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Overview Organización Reutilización ¿Cómo se crean los módulos? ¿Cómo se usan los módulos? Espacios de Nombres Declaración y Ejecución Paso de parámetros al módulo Notas finales Módulos Abril de 2014 15 / 59 ¿Cómo se crean los módulos? Módulos Proceso de generación y uso 1 2 3 Creación. Implementación. Almacenamiento. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 16 / 59 ¿Cómo se crean los módulos? Módulos 1. Creación Un módulo es un fichero con extensión .py. Basta con generar un fichero para tener un modulo Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 17 / 59 ¿Cómo se crean los módulos? Módulos 2. Implementación 1 2 Se escriben todas las definiciones de funciones, clases, ... y el código ejecutable (asignaciones bucles, prints, llamadas a funciones,...). El código ejecutable puede servir: Para inicializar las variables que se usarán en el código (tanto del módulo como de un programa diferente). Para realizar tareas concretas (leer ficheros, procesar listas, actualizar una base de datos, descargar vı́deos de canales de Youtube,...). Para ejecutar rutinas de testeo del módulo (necesarias para comprobar que nuestras funciones realizan su tarea correctamente). Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 18 / 59 ¿Cómo se crean los módulos? Módulos 3. Almacenamiento Se refiere a la ruta, dentro del directorio de ficheros, en la que almacenamos nuestro módulo. Veremos que esta ruta es determinante para hacer accesible nuestro módulo a otros programas que pretendan reutilizarlo (variable PYTHONPATH). Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 19 / 59 ¿Cómo se usan los módulos? Índice 1 2 3 4 5 6 7 8 9 Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Overview Organización Reutilización ¿Cómo se crean los módulos? ¿Cómo se usan los módulos? Espacios de Nombres Declaración y Ejecución Paso de parámetros al módulo Notas finales Módulos Abril de 2014 20 / 59 ¿Cómo se usan los módulos? Módulos Utilización Nuestro módulo ya está creado. 1 Para poder usar las funciones y variables que declara debemos importarlo. La instrucción básica es import nombre_modulo 2 Para llamar a las variables y funciones del módulo importado en nuestro nuevo código, ejecutaremos instrucciones como nombre_modulo . variable nombre_modulo . funcion ([ parametro1 , parametro2 ,...]) donde variable y funcion, se sustituyen por aquellos nombres que están declarados en el módulo. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 21 / 59 ¿Cómo se usan los módulos? Módulos Otras instrucciones de importación (I) Importamos todo el módulo a nuestro espacio de trabajo con la instrucción from nombre_modulo import * Ya no es necesario escribir nombre modulo.funcion([parametros]). Ahora basta con función([parametros]). Puedo importar sólo ciertas partes de módulo (ya sean funciones o variables). from nombre_modulo import variable from nombre_modulo import funcion De nuevo, puedo hacer uso de lo importado simplemente escribiendo variable o funcion([parametros]) donde sea necesario en mi código. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 22 / 59 ¿Cómo se usan los módulos? Módulos Otras instrucciones de importación (II) Puedo generar un alias para un módulo (si el nombre es demasiado largo o difı́cil de escribir) from n o m b r e _ m o d u l o _ d i f i c i l _ y _ l a r g o _ d e _ e s c r i b i r as modalias Ahora puedo acceder al contenido del módulo como modalias.variable o modalias.funcion([parametros]). Finalmente, puedo poner alias a variables o funciones del módulo from n o m b r e _ m o d u l o _ d i f i c i l _ y _ l a r g o import variable as varalias Podré acceder a ese contenido escribiendo sólo el alias varalias. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 23 / 59 ¿Cómo se usan los módulos? Módulos Overview: Ejemplo de modulo (areas.py) """ Modulo para el calculo de areas de formas basicas """ pi = 3.1416 def cuadrado ( lado ): """ Calcula el area del c u a d r a d o a partir de su lado """ return lado ** 2 def circulo ( radio ): """ Calcula el area del circulo dado el radio """ return pi * radio ** 2 print ’ Area cuadrado = ’ , cuadrado (2) print ’ Area circulo = ’ , circulo (1) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 24 / 59 ¿Cómo se usan los módulos? Módulos Otras instrucciones de importación: Ejemplo >>> import areas Area cuadrado = 4 Area circulo = 3.1416 >>> areas . pi 3.1416 >>> areas . cuadrado (3) 9 >>> from areas import * >>> circulo (1) 3.1416 >>> pi 3.1416 >>> from areas import cuadrado >>> cuadrado (4) 16 >>> import areas as a >>> a . pi 3.1416 >>> from areas import circulo as ac >>> ac (2) Cesar12.5664 Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 25 / 59 ¿Cómo se usan los módulos? Módulos Error de importación Si al importar el módulo obtengo un error >>> import mimodulo Traceback ( most recent call last ): File " < pyshell #9 > " , line 1 , in < module > import mimodulo ImportError : No module named mimodulo puede deberse a varias causas. Las más comunes: 1 Ese módulo no existe 2 No he escrito bien su nombre. 3 El módulo no está en la ruta de búsqueda de módulos de Python. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 26 / 59 ¿Cómo se usan los módulos? Módulos Error de importación Si estamos seguros que de el módulo existe, pero da error al importar, comprobaremos que el fichero del módulo está en la ruta de búsqueda de módulos de Python. ¿Cuál es la ruta de búsqueda? Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 27 / 59 ¿Cómo se usan los módulos? Módulos Ruta de búsqueda de módulos 1 Por defecto, busca en el directorio actual. Es el definido por aquel desde el que ejecutamos el módulo en la consola del sistema. desde el directorio en el que hemos abierto la consola de PYTHON. 2 3 Si no lo encuentra, busca en los directorios contenidos en la variable de entorno PYTHONPATH. Si aun ası́ no lo encuentra, busca en los directorios de instalación de PYTHON. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 28 / 59 ¿Cómo se usan los módulos? Módulos Obtener rutas de módulos en el sistema Podemos ver las rutas de búsqueda de dos formas: Variable de entorno del sistema: PYTHONPATH (Desde una consola del sistema) echo $PYTHONPATH Ojeando la variable path del módulo sys. (Ejecutando un fichero con código PYTHON o usando una consola de PYTHON) import sys print sys . path Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 29 / 59 ¿Cómo se usan los módulos? Módulos Modificar rutas de módulos en el sistema Si no está el módulo en todas las posibles rutas de búsqueda de PYTHON, ¿Cómo soluciono el problema de importación?. Opciones: 1 Modificando o creando la variable de entorno del sistema operativo (PYTHONPATH). (Cambio de ruta PERMANENTE) 2 Agregando una nueva ruta a la variable path del módulo sys. (Cambio de ruta TEMPORAL) 3 Copiando nuestro módulo en una ruta ya registrada por nuestra instalación de PYTHON. (Cambio de ruta PERMANENTE) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 30 / 59 ¿Cómo se usan los módulos? Módulos Modificación de PYTHONPATH LINUX Intérprete bash → export PYTHONPATH=$PYTHONPATH:ruta dir modulos Intérprete csh → setenv PYTHONPATH $PYTHONPATH:ruta dir modulos WINDOWS Inicio → Botón derecho sobre Equipo → opción de menú Propiedades → pestaña Opciones avanzadas → botón Variables de entorno ... Buscar PYTHONPATH y, si no está, botón Nueva... Nombre de variable: PYTHONPATH Valor de la variable: ruta dir modulos Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 31 / 59 ¿Cómo se usan los módulos? Módulos Modificación de PYTHONPATH (Windows) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 32 / 59 ¿Cómo se usan los módulos? Módulos Modificación de ruta de búsqueda de PYTHON (usando el módulo sys) >>> import sys >>> sys . path [’’, ’/ usr / bin ’ , ’/ usr / lib / python2 .7 ’ , ’/ usr / lib / python2 .7/ plat - linux2 ’ , ’/ usr / lib / python2 .7/ lib - tk ’ , ... ’/ usr / lib / pymodules / python2 .7 ’ , ’/ usr / lib / python2 .7/ dist - packages / IPython / extensions ’] >>> sys . path . append ( ’/ home / cesar / ownCloud / codigo ’) >>> sys . path [ -1] ’/ home / cesar / ownCloud / codigo ’ Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 33 / 59 Espacios de Nombres Índice 1 2 3 4 5 6 7 8 9 Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Overview Organización Reutilización ¿Cómo se crean los módulos? ¿Cómo se usan los módulos? Espacios de Nombres Declaración y Ejecución Paso de parámetros al módulo Notas finales Módulos Abril de 2014 34 / 59 Espacios de Nombres Módulos Ejemplo ilustrativo cesar @portat il :~/ code$ python Python 2.7.3 ( default , Mar 13 2014 , 11:03:55) [ GCC 4.7.2] on linux2 Type " help " , " copyright " , " credits " or " license " for more information >>> pi = 3.14152 >>> from areas import * Area cuadrado = 4 Area circulo = 3.1416 >>> pi 3.1416 ¿Algo raro? Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 35 / 59 Espacios de Nombres Módulos Ejemplo ilustrativo Para los más despistados... ¡Se ha sobreescrito el valor de la variable pi! Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 36 / 59 Espacios de Nombres Módulos Espacios de nombres (namespaces) I Pese a que el número de nombres que se pueden usar para funciones y variables es infinito, un programador usa unas pocas docenas. Los motivos principales: 1 No quiere nombres largos. 2 Quiere que el nombre se relacione semánticamente con el resultado de la variable o la tarea asignada a la función (resultado, suma, apellidos, lee fichero,...). 3 Poco tiempo libre para leer libros que incrementen su cultura (los manuales de programación no cuentan) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 37 / 59 Espacios de Nombres Módulos Espacios de nombres (Namespaces) II Los módulos funcionan como espacios de nombres ya que permiten usar variables con el mismo nombre en el código. No siempre es ası́. Este mecanismo de espacio de nombre se deshabilita cuando importamos en la forma from nombre modulo import * por lo que se recomienda la más general import nombre modulo o aquellas que incluyen “alias”. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 38 / 59 Declaración y Ejecución Índice 1 2 3 4 5 6 7 8 9 Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Overview Organización Reutilización ¿Cómo se crean los módulos? ¿Cómo se usan los módulos? Espacios de Nombres Declaración y Ejecución Paso de parámetros al módulo Notas finales Módulos Abril de 2014 39 / 59 Declaración y Ejecución Módulos Separando implementación y ejecución Siempre que cargamos un módulo, se ejecuta todo su código. 1 2 3 Declaración de variables Implementación de funciones Instrucciones ejecutables (print, llamadas a funciones,...) Con un mı́nimo retoque, podemos hacer que sólo se ejecuten las lı́neas declarativas (puntos 1 y 2) Para ello, necesitamos importar el módulo de la librerı́a estándar llamado sys. Pondremos el código ejecutable como parte del bloque if name == ’ main ’: Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 40 / 59 Declaración y Ejecución Módulos Separando implementación y ejecución areas2.py """ Modulo para el calculo de areas de formas basicas """ pi = 3.1416 def cuadrado ( lado ): """ Calcula el area del c u a d r a d o a partir de su lado """ return lado ** 2 def circulo ( radio ): """ Calcula el area del circulo dado el radio """ return pi * radio ** 2 if __name__ == ’ __main__ ’: print ’ Area cuadrado = ’ , cuadrado (2) print ’ Area circulo = ’ , circulo (1) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 41 / 59 Declaración y Ejecución Módulos Separando implementación y ejecución Importo el módulo desde consola PYTHON cesar @portat il :~/ code$ python Python 2.7.3 ( default , Mar 13 2014 , 11:03:55) Type " help " , " copyright " , " credits " or " license " for more information >>> import areas2 >>> dir ( areas2 ) [ ’ __builtins__ ’ , ’ __doc__ ’ , ’ __file__ ’ , ’ __name__ ’ , ’ __package__ ’ , ’ circulo ’ , ’ cuadrado ’ , ’ pi ’] Ejecuto el módulo desde la consola del sistema cesar @portat il :~/ code$ python areas2 . py Area cuadrado = 4 Area circulo = 3.1416 ¿Diferencias entre areas.py y areas2.py? Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 42 / 59 Declaración y Ejecución Módulos Separando implementación y ejecución Importando desde la consola PYTHON, el código que llamaba a las funciones cuadrado y cı́rculo ¡ya no se ejecuta! en areas2.py. Ejecutando desde la consola del sistema, no hay diferencia alguna. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 43 / 59 Paso de parámetros al módulo Índice 1 2 3 4 5 6 7 8 9 Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Overview Organización Reutilización ¿Cómo se crean los módulos? ¿Cómo se usan los módulos? Espacios de Nombres Declaración y Ejecución Paso de parámetros al módulo Notas finales Módulos Abril de 2014 44 / 59 Paso de parámetros al módulo Módulos Paso de parámetros al script Podemos ejecutar un módulo desde lı́nea de comandos pasándole parámetros. python modulo.py argum1 argum2 Basta retocar mı́nimamente nuestro código, importando el módulo sys, de la librerı́a estándar. Después, hacemos uso de la lista argv, declarada dentro de dicho módulo (sys.argv). Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 45 / 59 Paso de parámetros al módulo Módulos Paso de parámetros al script parametros.py import sys if __name__ == ’ __main__ ’: print ’ Numero de parametros = ’ , len ( sys . argv ) for s in sys . argv : print s , ’ -> ’ , type ( s ) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 46 / 59 Paso de parámetros al módulo Módulos Paso de parámetros al script python parametros.py uno 2 3.0 Numero de parametros = 4 parametros . py -> < type ’ str ’ > uno -> < type ’ str ’ > 2 -> < type ’ str ’ > 3.0 -> < type ’ str ’ > 1 2 El primer elemento de la lista (sys.argv[0]) contiene el nombre del script. Todos los elementos de la lista sys.argv son ‘‘strings’’ Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 47 / 59 Notas finales Índice 1 2 3 4 5 6 7 8 9 Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Overview Organización Reutilización ¿Cómo se crean los módulos? ¿Cómo se usan los módulos? Espacios de Nombres Declaración y Ejecución Paso de parámetros al módulo Notas finales Módulos Abril de 2014 48 / 59 Notas finales Módulos Recarga de módulos Cuando usamos un módulo desde consola PYTHON podemos percatarnos de un error de programación o de una mejora. Realizamos el cambio y volvemos a importar el módulo. ¿Los cambios se han cargado?. 1 Abrir consola 2 Importar e modulo areas.py 3 Editar el código: crear la función triangulo(base, altura) 4 Comprobar si es accesible desde consola 5 Reimportar el módulo (¿Funciona?) 6 Recargar el módulo (¿Funciona?) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 49 / 59 Notas finales Módulos Recarga de módulos: Ejemplo ¿Qué he hecho mal? Cuando un módulo se importa una vez no se importa de nuevo. Para forzar el refresco”del módulo se usa la instrucción reload ( modulo ) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 50 / 59 Notas finales Módulos Fichero areas.pyc Tras importar el fichero areas.py, se genera en el mismo directorio un fichero llamado areas.pyc. ¿Qué es? Se trata de un fichero generado por PYTHON de forma automática al importar un módulo. Es un código precompilado que acelera la carga del módulo. Puede borrarse sin problema. Al importar, se genera de nuevo. Cuando se modifica el módulo, al importarlo de nuevo se genera una nueva versión de .pyc. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 51 / 59 Notas finales Módulos Contenido de un módulo La mayorı́a de las veces vamos a usar un módulo que nos hallamos descargado o uno que hemos creado hace muuuucho tiempo. Puedo “refrescar” el contenido del módulo mirando la documentación que el desarrollador ha generado (PDF, HTML,...) Si el desarrollador soy yo, probablemente no haya creado documentos (/). En este caso, puedo Mirar el código fuente del módulo Usar funciones de PYTHON (dir, help) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 52 / 59 Notas finales Módulos Funciones de documentación Función dir() Sin argumentos, devuelve los nombres de variables y funciones disponibles en la sesión. Con argumentos (el nombre de un módulo, p.e.), devuelve las variables disponibles para ese argumento. >>> dir ( areas ) [ ’ __builtins__ ’ , ’ __doc__ ’ , ’ __file__ ’ , ’ __name__ ’ , ’ __package__ ’ , ’ circulo ’ , ’ cuadrado ’ , ’ pi ’] Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 53 / 59 Notas finales Módulos Funciones de documentación >>> areas . __doc__ ’ Modulo para el calculo de areas de formas basicas ’ >>> areas . __file__ ’ areas . py ’ >>> areas . __name__ ’ areas ’ >>> areas . __package__ Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 54 / 59 Notas finales Módulos Funciones de documentación La función help() permite obtener la documentación del argumento que se le pase. Si no hay argumentos, abre un entorno de ayuda, donde se puede consultar sobre PYTHON >>> help() Welcome to Python 2.7! This is the online help utility. If this is your first time using Python, you should definitely check out the tutorial on the Internet at http://docs.python.org/2.7/tutorial/. ... >>> help(areas.circulo) Help on function circulo in module areas: circulo(radio) Calcula el area del circulo dado el radio (END) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 55 / 59 Notas finales Módulos Formas de reutilización de código PYTHON (I) Posibilidades: 1 Abro el módulo, copio todo su contenido al portapapeles y lo pego en mi nuevo programa. 2 Cargo en mi fichero todo el módulo import modulo 3 Carga selectiva de cierto contenido del módulo. from modulo import a l g o Q u e E s t a D e f i n i d o E n E l M o d u l o Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 56 / 59 Notas finales Módulos Formas de reutilización de código PYTHON (II) “Abro el módulo, copio todo su contenido al portapapeles y lo pego en mi nuevo programa”. Ventajas: 1 Es un procedimiento sencillo esto del “cortar y pegar”. Inconvenientes: 1 Puedo equivocarme al copiar por fallar al seleccionar lo que quiero, o por no incluirlo todo (dichoso ratón!!!). 2 Mis programas siguen siendo enormes (muchas lı́neas). 3 Puedo sobrescribir variables que uso en el nuevo código. 4 No puedo hacer un seguimiento de las modificaciones útiles que realizo (¿En qué fichero hice aquellos cambios?) Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 57 / 59 Notas finales Módulos Formas de reutilización de código PYTHON (III) “Cargo en mi fichero todo el contenido del módulo mediante el uso de la instrucción import”. Ventajas: 1 No tengo que conocer con relativa profundidad el módulo. 2 Lo importa TODO. 3 Sintaxis sencilla. Inconvenientes: 1 Lo importa TODO. 2 Puede que el módulo ocupe mucho. Mi programa “pesa” más (en KB). Efecto creciente a medida que importe más y más módulos. 3 Puede que los nombres de variables dentro de los módulos sean muy largos modulo.clase.nombrevariable Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 58 / 59 Notas finales Módulos Formas de reutilización de código PYTHON (IV) “Cargo parcialmente los contenidos de aquellos módulos que me interesan para mi programa. Hago uso de la instrucción from modulo import variable|función”. Ventajas: 1 Programas óptimos a nivel de tamaño y simplicidad. 2 Simplificación de los nombres de variables y métodos. Se accede a ellos mediante la llamada a variable o función. Inconvenientes: 1 Conocimiento avanzado del contenido de los módulos. 2 Múltiples sentencias de importación. Conocimiento avanzado del contenido de los módulos. 3 Múltiples sentencias de importación. 4 Posibilidad de “colisión de nombres”. Cesar Husillos & Vı́ctor Terrón (IAA-CSIC) Módulos Abril de 2014 59 / 59