Saltar a contenido

2.5 Trabajar con Módulos en Python

1. ¿Qué es un módulo y por qué es útil?

Definición de Módulo

En Python, un módulo es un archivo que contiene definiciones y declaraciones de Python (funciones, variables, clases, etc.). Los módulos permiten organizar el código en bloques reutilizables, lo que hace que sea más fácil mantener y reutilizar en diferentes programas. Además de los módulos que puedes crear, Python viene con una rica biblioteca estándar de módulos para facilitar tareas comunes como trabajar con fechas, operaciones matemáticas, manipulación de archivos y mucho más.

¿Por qué es útil un módulo?

  • Reutilización: Puedes escribir una vez el código dentro de un módulo y usarlo tantas veces como lo necesites en diferentes programas.
  • Organización: Permiten dividir programas grandes en pequeños bloques más manejables.
  • Mantenimiento: Si necesitas cambiar el comportamiento de una función o clase, solo tendrás que actualizar el módulo, sin necesidad de modificar cada archivo que lo usa.

2. Cómo crear un módulo en Python

Para crear un módulo, simplemente escribe el código Python en un archivo con la extensión .py. Una vez guardado, podrás importar ese archivo y utilizar sus funciones y variables en otros programas.

Tener en cuanta el nombre y la localización del archivo para importarlo correctamente. Ejempplo de estructura si queremos guardar varios módulos en una carpeta para ir clasificandolos:

mi_proyecto/
│├── main.py          # Archivo principal donde se usará el módulo
│└── mis_modulos/     # Carpeta que contiene los módulos
│    ├── __init__.py  # Archivo para indicar que es un paquete
│    ├── matematicas.py  # Módulo con funciones matemáticas
│    └── texto.py       # Módulo con funciones de manipulación de texto
En este caso mis_modulos es una carpeta que contiene varios módulos. Para importar un módulo desde esta carpeta, debes asegurarte de que la carpeta contenga un archivo __init__.py (puede estar vacío) para que Python la reconozca como un paquete.

¿Como imporar desde main.py?

from mis_modulos import matematicas  # Importa el módulo matematicas desde la carpeta mis_modulos
from mis_modulos.texto import formatear_texto  # Importa una función específica

Ejemplo:

Supongamos que tienes un archivo llamado mimodulo.py con el siguiente código:

# mimodulo.py
def saludar(nombre):
    return f"¡Hola, {nombre}!"

Este archivo mimodulo.py contiene una función llamada saludar. Para utilizarla en otro archivo, simplemente necesitas importarlo.

3. Importar y usar un módulo en otro archivo Python

Para importar un módulo en Python, utilizamos la instrucción import. De esta forma, podemos acceder a todas las funciones, clases y variables definidas en el módulo importado.

Ejemplo:

Imagina que tienes dos archivos:

Archivo: mimodulo.py:

def saludar(nombre):
    return f"¡Hola, {nombre}!"

Archivo: principal.py:

import mimodulo  # Importamos el módulo

nombre = "Juan"
print(mimodulo.saludar(nombre))  # Llamamos a la función saludar del módulo

En este caso, hemos importado todo el módulo mimodulo y luego llamamos a su función saludar utilizando la notación mimodulo.saludar(nombre).

4. Importar funciones específicas de un módulo

Si solo necesitas una o algunas funciones de un módulo, puedes importarlas específicamente usando la sintaxis from.

Ejemplo:

from mimodulo import saludar  # Importamos solo la función saludar

nombre = "Ana"
print(saludar(nombre))  # Llamamos directamente a la función sin necesidad de usar el nombre del módulo

En este caso, solo importamos la función saludar del módulo mimodulo y la usamos directamente en el código.

5. Ejercicio Resuelto

Ejercicio 1: Crear un módulo matemático y usarlo en otro archivo

Paso 1: Crear un módulo con funciones matemáticas.

Vamos a crear un archivo llamado matematicas.py que contendrá varias funciones matemáticas:

# matematicas.py
def sumar(a, b):
    return a + b

def restar(a, b):
    return a - b

def multiplicar(a, b):
    return a * b

def dividir(a, b):
    if b == 0:
        return "No se puede dividir por cero"
    return a / b

Paso 2: Usar el módulo en otro archivo.

Ahora, creamos otro archivo llamado usar_matematicas.py donde vamos a importar las funciones del módulo matematicas.py y usarlas:

# usar_matematicas.py
from matematicas import sumar, restar  # Importamos solo las funciones sumar y restar

x = 10
y = 5

print(sumar(x, y))  # 15
print(restar(x, y))  # 5

Explicación: En este ejercicio, creamos un módulo matematicas.py que contiene cuatro funciones y luego las importamos en otro archivo para hacer uso de ellas. Observa que solo importamos las funciones que necesitamos.

6. Ejercicios prácticos

Ejercicio 1: Crea un módulo con una función de comparación

Ejercicio 1: Crear un módulo de Comparación

Crea un archivo llamado comparacion.py con las funciones para comparar dos números: mayor, menor e igual. Deve devolver 1 si a es mayor que b, -1 si a es menor que b y 0 si son iguales. Luego, en otro archivo, importa y usa estas funciones.

Pistas: - Usa input() para que el usuario ingrese dos números. - Implementa la función de comparación en el módulo.

Ejemplo de solución
# comparacion.py
def compara(a, b):
    return 1 if a > b else 0 if a == b else -1
# usar_comparacion.py
from comparacion import compara

a = int(input("Introduce el primer número: "))
b = int(input("Introduce el segundo número: "))

resultado = compara(a, b)
if resultado == 1:
    print(f"{a} es mayor que {b}")
elif resultado == -1:
    print(f"{a} es menor que {b}")
else:
    print(f"{a} es igual a {b}")

Ejercicio 2: Crear un módulo de cálculos de áreas

Ejercicio 2: Crear un módulo de cálculos de áreas

Crea un módulo llamado areas.py que tenga funciones para calcular el área de un círculo y un rectángulo. Luego, en un archivo separado, importa estas funciones y calcula el área de diferentes figuras geométricas.

Ejemplo de solución
# areas.py
import math

def area_circulo(radio):
    return math.pi * radio ** 2

def area_rectangulo(base, altura):
    return base * altura

def area_triangulo(base, altura):
    return 0.5 * base * altura
# usar_areas.py
from areas import area_circulo, area_rectangulo, area_triangulo
print("Área del círculo con radio 5:", area_circulo(5))
print("Área del rectángulo con base 4 y altura 6:", area_rectangulo(4, 6))
print("Área del triángulo con base 3 y altura 7:", area_triangulo(3, 7))

```


Ejercicio 3: Crear un módulo con funciones para determinar si un número es par, impar o si es primo.

Ejercicio 3: funciones matemáticas

Crea un módulo llamado numeros.py que contenga las siguientes funciones:

  • es_par(n): Devuelve True si n es par, False en caso contrario.
  • es_impar(n): Devuelve True si n es impar, False en caso contrario.
  • es_primo(n): Devuelve True si n es un número primo, False en caso contrario.

Luego, en otro archivo, importa estas funciones y prueba su funcionamiento con diferentes números.

Ejemplo de solución
# numeros.py
def es_par(n):
    return n % 2 == 0

def es_impar(n):
    return n % 2 != 0

def es_primo(n):
    if n <= 1:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True
# usar_numeros.py
from numeros import es_par, es_impar, es_primo

numero = int(input("Introduce un número: "))

print(f"¿Es {numero} par? {es_par(numero)}")
print(f"¿Es {numero} impar? {es_impar(numero)}")
print(f"¿Es {numero} primo? {es_primo(numero)}")

```


7. Resumen

En este tema hemos aprendido cómo trabajar con módulos en Python. Hemos visto cómo crear, importar y utilizar módulos para hacer nuestro código más organizado y reutilizable. Además, hemos aprendido cómo importar funciones específicas de un módulo y cómo usar módulos propios en lugar de escribir el mismo código una y otra vez. Los ejercicios prácticos permiten consolidar los conceptos vistos y mejorar la comprensión del trabajo con módulos.


Recursos Complementarios:

Ejercicios propuestos

Ejericicio 1: Crear un módulo para cálculo de áreas:

Crea un módulo llamado areas.py que contenga funciones para calcular el área de un círculo, un rectángulo y un triángulo. Luego, en otro archivo, importa estas funciones y calcula el área de diferentes figuras geométricas.

Puedes usar las siguientes fórmulas:

  • Área del círculo:
\[ \pi \times \text{radio}^2 \]
  • Área del rectángulo:
\[ \text{base} \times \text{altura} \]
  • Área del triángulo:
\[ \frac{1}{2} \times \text{base} \times \text{altura} \]

El número pi puedes importarlo desde el módulo math de Python.

import math

numero_pi = math.pi

Ejercicio 2: Crear un módulo para manejar listas de enteros

Crea un módulo llamado listas.py que contenga funciones para:

  • Generar una lista de N números enteros aleatorios entre un rango dado.
  • Una función que indique si la lista tiene o no números repetidos.
  • Una función que multiplique todos los números de la lista por un número dado.
  • Una función que devuelva la suma de todos los números de la lista.

Luego, en otro archivo, importa estas funciones y prueba su funcionamiento.

Ejercicio 3: Crear un módulo para manejo de cadenas de texto

Crea un módulo llamado texto.py que contenga funciones para: - Contar el número de palabras en una cadena de texto. - Contar el número de caracteres (con y sin espacios). - Convertir una cadena a mayúsculas y otra a minúsculas. - Revertir una cadena de texto. Luego, en otro archivo, importa estas funciones y prueba su funcionamiento.

Soluciones propuestas a los ejercicios propuestos

Solución Ejercicio 1: Crear un módulo para cálculo de áreas
areas.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# areas.py
import math

def area_circulo(radio):
    return math.pi * radio ** 2

def area_rectangulo(base, altura):
    return base * altura

def area_triangulo(base, altura):
    return 0.5 * base * altura
usar_areas.py
1
2
3
4
5
6
# usar_areas.py
from areas import area_circulo, area_rectangulo, area_triangulo

print("Área del círculo con radio 5:", area_circulo(5))
print("Área del rectángulo con base 4 y altura 6:", area_rectangulo(4, 6))
print("Área del triángulo con base 3 y altura 7:", area_triangulo(3, 7))
Solución Ejercicio 2: Crear un módulo para manejar listas de enteros
listas.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# listas.py
import random

def generar_lista(n, rango_inferior, rango_superior):
    return [random.randint(rango_inferior, rango_superior) for _ in range(n)]

def tiene_repetidos(lista):
    return len(lista) != len(set(lista))

def multiplicar_lista(lista, factor):
    return [x * factor for x in lista]

def sumar_lista(lista):
    return sum(lista)
usar_listas.py
1
2
3
4
5
6
7
8
# usar_listas.py
from listas import generar_lista, tiene_repetidos, multiplicar_lista, sumar_lista

lista = generar_lista(10, 1, 100)
print("Lista generada:", lista)
print("¿Tiene repetidos?", tiene_repetidos(lista))
print("Lista multiplicada por 2:", multiplicar_lista(lista, 2))
print("Suma de la lista:", sumar_lista(lista))
Solución Ejercicio 3: Crear un módulo para manejo de cadenas de texto
texto.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# texto.py
def contar_palabras(cadena):
    return len(cadena.split())

def contar_caracteres(cadena):
    return len(cadena)

def contar_caracteres_sin_espacios(cadena):
    return len(cadena.replace(" ", ""))

def convertir_mayusculas(cadena):
    return cadena.upper()

def convertir_minusculas(cadena):
    return cadena.lower()

def revertir_cadena(cadena):
    return cadena[::-1] 
title
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# usar_texto.py
from texto import contar_palabras, contar_caracteres, contar_caracteres_sin_espacios, convertir_mayusculas, convertir_minusculas, revertir_cadena

texto = "Hola mundo"
print("Número de palabras:", contar_palabras(texto))
print("Número de caracteres:", contar_caracteres(texto))
print("Número de caracteres sin espacios:", contar_caracteres_sin_espacios(texto))
print("Texto en mayúsculas:", convertir_mayusculas(texto))
print("Texto en minúsculas:", convertir_minusculas(texto))
print("Texto revertido:", revertir_cadena(texto))