Módulos¶
Ya hemos visto que un programa puede dividirse en varios módulos. Pero hay más. Podemos escribir módulos de utilidad que sean reutilizables en varios de nuestros proyectos.
Veamos un ejemplo. Además de las funciones proporcionadas por el lenguaje Python, podemos diseñar nuestras propias funciones. Supongamos que nos dedicamos a crear videojuegos. Creamos una función que, cada vez que la invocamos, hace sonar un disparo:
disparo(1)
disparo(2)
disparo(1)
le pasamos como argumento la duración del sonido del disparo, en segundos.
La función se define de la siguiente manera:
def disparo(segundos):
... instrucciones a ejecutar
... cada vez que invocamos la funcion
y una vez definida, la invocamos mediante:
disparo(n)
Nuestra función disparo() puede formar parte de un módulo llamado
misfunciones.py. Puede resultar muy útil en otros proyectos, así que
creamos una colección de módulos de utilidad, en la que incluimos
el archivo misfunciones.py.
Estas colecciones son paquetes de archivos conocidos como biblioteca de módulos.
La biblioteca estándar¶
Tras instalar Python en nuestro ordenador, tendremos disponible, entre otras cosas:
- el editor IDLE
- el intérprete de Python, que toma nuestros programas, los traduce a formato binario de ceros y unos, y los ejecuta
- la biblioteca oficial de Python, con módulos que definen todo tipo de funciones de utilidad, complementando las funciones aportadas por el propio lenguaje
A las funciones integradas en el lenguaje, que no forman
parte de un módulo de biblioteca, como es el caso de print(),
se les llama funciones built-in.
¿Que modulos tenemos instalados?¶
En nuestro equipo tendremos la biblioteca estándar de Python mas otras bibliotecas de tereceros que hayamos instalado. Podemos averiguar la lista de módulos a nuestra disposición abriendo la ventana shell de IDLE y ejecutando el comando:
>>> help("modules")
El módulo math¶
Supongamos que queremos calcular un número elevado al cuadrado:
numero=5
print( pow(numero,2) )
Lo que, al ejecutarse, muestra:
25
Pero... ¿como se calcula una raiz cuadrada? Python no tiene una función built-in que lo haga.
Para suplir esta carencia, la biblioteca estándar
incluye el módulo math, que define un buen número de
funciones de cálculo. La función math.sqrt() (abreviatura de square root)
calcula raíces cuadradas.
Para usar cualquier módulo, hay que incorporarlo a nuestro programa mediante la
sentencia import:
| RaizCuadrada.py | |
|---|---|
1 2 3 4 | |
Lo que al ejecutarse muestra el resultado con decimales:
5.0
Nótese que las funciones de un módulo externo se invocan precedidas por el nombre del módulo:
math.sqrt(numero)
Un ejemplo¶
Veamos un ejemplo práctico:
| Hipotenusa.py | |
|---|---|
1 2 3 4 5 6 7 8 9 10 | |
Lo que, al ejecutarse, muestra 25.0
Vemos que la función sqrt() va precedida por el nombre
del módulo, mientras que las funciones built-in, como pow(), no llevan
ningún prefijo.
Formas de importar un módulo¶
Si escribimos:
import math
estamos incorporando la palabra math al espacio de nombres reconocidos por
nuestro programa. En consecuencia, todas las funciones de ese módulo
han de ir precedidas por el nombre del mismo:
raiz = math.sqrt(numero)
Pero podemos importar la función sqrt() directamente, sin necesidad de
importar el módulo completo:
from math import sqrt
numero = 25
raiz = sqrt(numero)
print(raiz)
Vemos como cambia la sintaxis de la sentencia import:
import math # importando todo el módulo
from math import sqrt # importando solo una función
En el segundo caso, math será un término desconocido para nuestro programa,
porque lo que hemos importado es la función. Tenemos que escribir:
raiz = sqrt(numero)
en lugar de
raiz = math.sqrt(numero)
hay una tercera opción; incorporar los nombres de todas las funciones del módulo:
from math import *
En este caso, las referencias a las funciones siguen siendo sin prefijo:
raiz = sqrt(numero)
pero esta es una técnica algo peligrosa, porque estamos importando nombres sin controlar el proceso. Pueden producirse colisiones con otros identificadores ya existentes en nuestro programa.
Alias¶
Cuando importamos un módulo o una función, podemos asignarles un alias y ponerlo en el espacio de nombres reconocidos por el programa:
import math as m
from math import sqrt as raiz
Lo que nos obliga a escribir:
resultado = m.sqrt(25)
resultado = raiz(25)
El uso de alias puede hacer más fácil las cosas, pero su abuso puede dar lugar a un programa confuso, porque nuestro programa contendrá identificadores que no son estándar.