Cómo funcionan los módulos en Python

Este será el último tutorial de la serie "Cómo funcionan los … en Python". Por supuesto, no puedo concluir esta serie sin mencionar lo que es el siguiente nivel en la programación con Python, es decir, trabajar con módulos, los cuales son fundamentales a la hora de gestionar tareas de programación no triviales.

La mayoría de las veces, las tareas de programación no triviales son programas largos con muchas líneas de código. Los módulos son útiles a la hora de separar este tipo de programas complejos en pedazos manejables y permiten la reutilización de código. De esta manera, serás capaz de utilizar el código en cualquier momento mediante la importación de ese módulo. También puedes resolver el hecho de copiar cierta función muchas veces en diferentes programas a través de los módulos.

Vamos a entrar de lleno en el tutorial para ver cómo funcionan los módulos en Python.

Los módulos en Python

Cuando creas programas en Python, los archivos generados suelen tener la extensión particular de Python, ya sabes, .py. Los módulos en Python se crean de la misma manera. Es decir, son archivos de código con extensión .py, y ubicados en un directorio donde Python sea capaz de encontrarlos (es decir, el directorio de trabajo actual o listados en sys.path).

Los módulos contienen normalmente sentencias que están relacionadas entre sí. Como he mencionado anteriormente, podemos utilizar módulos en cualquier momento. El uso de un módulo consiste en utilizar el código (es decir, variables, funciones) almacenado en dicho módulo. El proceso de añadir y utilizar dicho código se llama importación.

Creación de módulos

Crear un módulo en Python es muy simple. Digamos que queremos crear un módulo que imprima el nombre de alguien. Escribe el siguiente código utilizando tu editor favorito, y guardalo como myname.py. Esta será el nombre de tu módulo, excluyendo la parte .py, el cual se asignará a la variable global __name__.

def print_name(n):
    print 'Hola', n

Importando módulos

Si tienes un archivo de Python y quieres añadir el código del módulo que hemos creado anteriormente, lo importaremos utilizando la palabra clave import, tal que así:

import myname
name.print_name('Jorge')

La salida de este script será: Hola Jorge.

Asegúrate de que Python es capaz de encontrar el archivo importado. Como consejo, ponlo en el mismo directorio que el archivo de Python que está utilizando la importación.

Como puedes ver, la importación de un módulo nos permite mejorar nuestro programa añadiendo nuevas funcionalidades al mismo a partir de archivos externos (es decir, módulos).

Sin embargo, ¿que está sucediendo aquí, detrás de bambalinas? Cuando importamos un módulo, Python compila ese módulo y genera un archivo .pyc, y el programa sólo se vuelve a compilar si el .py es más reciente que el archivo .pyc.

Tomemos otro ejemplo, pero esta vez con un módulo integrado en Python. Vamos a elegir el módulo de matemáticas math. En este ejemplo, para un número concreto queremos encontrar el redondeo a la alta (el valor entero más pequeño mayor o igual que el número), el redondeo a la baja (valor de número entero más grande menor que o igual al número), y el valor absoluto de ese número. El script de Python para este programa es el siguiente:

import math
x = 4.7
print 'The ceiling of ' + str(x) + ' is: ' + str(math.ceil(x))
print 'The floor of ' + str(x) + ' is: ' + str(math.floor(x))
print 'The absolute value of ' + str(x) + ' is: ' + str(math.fabs(x))

Si ejecutas este script, la salida sería:

The ceiling of 4.7 is: 5.0
The floor of 4.7 is: 4.0
The absolute value of 4.7 is: 4.7

Por tanto, hemos sido capaces de aplicar diferentes operaciones en nuestro número sin necesidad de escribir código para cada operación, sino más bien mediante la reutilización de funciones ya disponibles en el módulo math. Eso es de gran utilidad , ¿verdad?

Tal vez te preguntes, ¿hay que utilizar siempre la notación math.function()? ¿No podemos utilizar la función de inmediato con el nombre del módulo (es decir, math)? Sí, se puede hacer usando la siguiente sintaxis para la importación:

from math import *

De esta manera, puedes llamar a las funciones anteriores (ceil(x), floor(x), y fabs(x)) sin la necesidad de precederlos con el nombre del módulo, math.

Módulos como scripts

Volvamos a nuestro módulo de antes, myname.py:

def print_name(n):
    print 'Hola', n

¿Podemos tratar este módulo como un proceso independiente que se puede ejecutar directamente y pasarle argumentos mediante línea de comandos? Por ejemplo, ¿qué pasará si escribes lo siguiente en línea de comandos?

python myname.py 'Jorge'

¡Nada! Inténtalo y no obtendrás ninguna salida.

Con el fin de ser capaz de ejecutar el módulo como un script, tenemos que establecer que __name__ = '__main__'. Por lo tanto, el módulo myname ahora se verá de la siguiente manera:

def print_name(n):
    print 'Hola', n
 
if __name__ == '__main__':
    import sys
    print_name(sys.argv[1])

Si ejecutas este comando en tu terminal: python myname.py 'Jorge', obtendrás la siguiente salida:

Hola Jorge

Fuente: Abder-Rahman Ali

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP