Python desde Cero: Módulos

Publicado el 12 julio 2013 por Codehero @codeheroblog

Bienvenidos una vez más a Python desde Cero, curso en el cual aprendemos a programar sin conocimiento alguno. En el capítulo anterior, te enseñe como crear y usar funciones dentro de Python. Si eres nuevo en este curso, te recomiendo que le eches un vistazo al capítulo anterior para que te pongas en contexto (Capítulo 3)

Hoy, vamos a aprender a desarrollar nuestros propios módulos, como importarlos en nuestras aplicaciones y a como usar los que ya vienen incorporados con el lenguaje.


Módulos

Los módulos en Python son grupos de funciones alojadas dentro de un archivo .py.

Como observamos en capítulos anteriores, uno no puede desarrollar una aplicación compleja sin organizar nuestro código en funciones, y mientras que nuestro programa continua creciendo cada vez más y más, vamos a necesitar una manera para organizarlo a un nivel que no se vuelva engorroso de mantener, es ahí donde viene a la mano los módulos. Con ellos podemos organizar un grupo de funciones como si fueran un conjunto de herramientas las cuales podemos hacer uso de ellas cada vez que las necesitemos.

Los módulos son bastante fáciles de crear, ya que son scripts sencillos de Python. Vemos como crear un módulo:

Vamos a necesitar abrir un nuevo archivo en un editor de texto o en un IDE de tu preferencia. Para que el curso tenga sentido, voy a continuar con el ejemplo que utilizamos en el ultimo capítulo, crear un carrito de compra (ecommerce). Solo que esta vez vamos a calcular el impuesto de un articulo en especifico dado su precio.

def calcularImpuesto(precio, impuesto):
  precioNuevo = precio / 100 * (100 + impuesto)
  return precioNuevo

Observemos que fue sencillo de realizar, lo que hicimos fue definir una función llamada calcularImpuesto la cual toma dos argumentos precio y impuesto, para luego calcular y retornar el valor total del articulo.

Para que este código sea o cumpla como un módulo en Python, lo único que tenemos que hacer es guardarlo con la extensión .py en el mismo directorio donde residen nuestros otros scripts de la aplicación. Vamos a guardar el archivo con el siguiente nombre: finanzas.py y así nuestro módulo será el módulo de finanzas.


¿Cómo importar un módulo?

Para usar los módulos existen dos posibilidades, podemos usar la palabra clave import o la palabra clave from. import es la manera más simple y más coman de usar, ya que que importa todas las funcionalidades existentes dentro del archivo .py en donde este alojado ese módulo. Veamos como importar el ejemplo anterior en donde teníamos el módulo de finanzas (finanzas.py):

import finanzas

Observemos que para importar el módulo no hizo falta escribir la extensión del archivo. Una vez que Python interprete esta linea de código podemos tener a nuestra disposición la función calcularImpuesto que definimos anteriormente.

La otra manera es usando la palabra clave from, la cual importará única y exclusivamente la función que uno le pasa como parámetro, es decir, imaginemos que tenemos un módulo que posee miles y miles de funciones, para que importar todas esas funciones dentro de nuestro script si solo vamos a necesitar una, es en este caso donde viene a la mano el from. Una de las prácticas más recomendadas dentro de Python es hacer uso de la palabra from cuando se esta trabajando con módulos, ya que salva tiempo de procesamiento y recursos de la máquina en cuestión.

Veamos como importar una funcionalidad del módulo de finanzas:

from finanzas import calcularImpuesto

Observemos que necesitamos especificar de que módulo queremos obtener nuestra función con from + MÓDULO y luego la función que queremos importar import + FUNCIÓN. En nuestro caso, del módulo de finanzas importa la función calcularImpuesto.

También puedes importar varias funciones a la vez, solo necesitas separarlas por comas.

from finanzas import calcularImpuesto, calcularDescuento

Incluso puedes importar todas las funciones usando un wildcard

from finanzas import *

Después de importar los módulos, la manera de usar las funciones es la siguiente: el nombre del módulo, seguido de un punto, seguido del nombre de la función a usar. Veamos un ejemplo:

import finanzas
print finanzas.calcularImpuesto(100, 5)

Si corremos el script, debería imprimir 105. Una prueba sencilla, pero significa que nuestro módulo funcionó a la perfección!


Módulos Incorporados

Existen miles de módulos incorporados dentro de Python. Debido a que el rango es extenso, es imposible cubrirlos todos dentro de este curso, por lo que solo me voy basar en los más útiles. Si quieres conocer más sobre los módulos incorporados en Python te invito a que le eches un vistazo a la página oficial donde encontrarás toda la documentación necesaria. Veamos cuales son esos módulos:

  • math
  • os
  • datetime
  • urllib2

math

El módulo de math nos provee el acceso a funciones y constantes matemáticas. Veamos unos ejemplos:

import math
 
math.pi #Pi, 3.14...
math.e  #Número de Euler, 2.71...
 
math.degrees(2)  #2 radianes = 114.59 grados
math.radians(60) #60 grados = 1.04 radianes
 
math.sin(2)   #Seno de 2 radianes
math.cos(0.5)  #Coseno de 0.5 radianes
math.tan(0.23) #Tangente de 0.23 radianes
 
math.factorial(5) #1 * 2 * 3 * 4 * 5 = 120
math.sqrt(49)   #Raíz cuadrada de 49 = 7

Existe miles de funciones dentro de este módulo te invito a que las revises todas aquí.

datetime

Si necesitas trabajar con fechas y tiempos, entonces el módulo datetime es el indicado para ti. Veamos un ejemplo con los usos más comunes:

import datetime
from datetime import date
import time

time.time() #Retorna el número de segundos desde el 1 de enero de 1970 (Unix Epoch)
 
date.fromtimestamp(123456789)   #Convierte número de segundos en un objeto tipo date
date.fromtimestamp(time.time()) #Podemos combinar las funciones time y fromtimestamp para representar el tiempo actual

currentDate = date.fromtimestamp(time.time()) #Creamos una variable con la representación del tiempo actual
currentDate.strftime("%d/%m/%y") #Le coloca el siguiente formato a la fecha DD/MM/YY
 
currentDate.isoformat() #Le coloca el formato estándar ISO a esa fecha

Existe miles de funciones dentro de este módulo te invito a que las revises todas aquí.

os

Este módulo te permite trabajar con el sistema operativo en el cual Python este ejecutándose, ya sea Windows, Mac o Linux. Nos enfocaremos en la funcionalidad path ya que es la más común. Path nos permite manipular y encontrar propiedades de los archivos y carpetas que existen en el sistema. Vemos unos ejemplos:

from os import path
 
path.exists("/Users/Picca") #Cheque si un directorio existe

path.getatime("/Users") #Retorna la fecha en la cual ese directorio fue accedido por ultima vez
path.getmtime("/Users") #Retorna la fecha en la cual ese directorio fue modificado por ultima vez

path.getsize("/Users/Picca/Desktop/boot") #Retorna el tamaño en bytes de ese archivo

path.join("C:", "Users") #Retorna la siguiente dirección "C:/Users"

Existe miles de funciones dentro de este módulo te invito a que las revises todas aquí.

urllib2

Este módulo permite interactuar con la web. La función más común es la urlopen la cual nos permite descargar una página o un archivo que exista en la web. Veamos unos ejemplos:

import urllib2
urllib2.urlopen("http://codehero.co")

Este scritp descargará el HTML de la pagina web codehero.co.

import urllib2
urllib2.urlopen("http://codehero.co").read(100)

Al igual que en el ejemplo anterior, se descargará el HTML de codehero.co pero ahora solo nos devolverá los primeros 100 caracteres. Para así después poder extraer los trozos que nos sean necesarios.

Existe miles de funciones dentro de este módulo te invito a que las revises todas aquí.


Conclusión

En esta lección, aprendimos como crear módulos en Python, como importarlos en nuestros programas, y como usar los módulos que vienen incorporados en el lenguaje. Te invito a que practiques y crees tus propios módulos ya que lo mejor de todo es que los puedes reutilizar en diferentes aplicaciones que estés desarrollando. Si tienes alguna pregunta, yo estaré feliz de responderte en los comentarios, además espero que te unas y le eches un vistazo a todo el resto de este curso. Te espero la próxima semana!