Módulos

Anuncio
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
Descargar