9. Módulos y Librerías Básicas
📦 9.1 ¿Qué es un módulo? ¿Y una librería?
Section titled “📦 9.1 ¿Qué es un módulo? ¿Y una librería?”Concepto de módulo
Section titled “Concepto de módulo”Un módulo es un archivo de Python (.py) que contiene definiciones de funciones, clases y variables que pueden ser reutilizadas en otros programas. Es la unidad básica de organización de código en Python.
Concepto de librería (biblioteca)
Section titled “Concepto de librería (biblioteca)”Una librería (o biblioteca) es una colección de módulos relacionados que proporcionan funcionalidad específica. Puede ser un solo módulo o un conjunto de módulos organizados en paquetes.
Diferencias clave
Section titled “Diferencias clave”| Concepto | Descripción |
|---|---|
| Módulo | Un archivo .py individual |
| Paquete | Directorio con múltiples módulos y un archivo __init__.py |
| Librería | Término general para módulos y paquetes que proporcionan funcionalidad |
Propósito
Section titled “Propósito”| Propósito | Descripción |
|---|---|
| Reutilización | Evitar reescribir código común |
| Organización | Estructurar proyectos grandes en partes manejables |
| Mantenibilidad | Facilitar actualizaciones y correcciones |
| Colaboración | Compartir código entre desarrolladores |
| Abstracción | Ocultar complejidad detrás de interfaces simples |
Tipos de librerías
Section titled “Tipos de librerías”| Tipo | Descripción | Ejemplos |
|---|---|---|
| Estándar | Incluidas con Python | math, random, datetime |
| Externas | Instaladas con pip | requests, pandas, numpy |
| Propias | Creadas por el desarrollador | módulos de tu proyecto |
Ejemplo: Crear un módulo propio
Section titled “Ejemplo: Crear un módulo propio”# Archivo: calculadora.pydef 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 "Error: División por cero" return a / b
PI = 3.14159Ejemplo: Usar el módulo creado
Section titled “Ejemplo: Usar el módulo creado”# Archivo: main.pyimport calculadora
# Usar funciones del móduloresultado = calculadora.sumar(5, 3)print(resultado) # 8
print(calculadora.multiplicar(4, 7)) # 28print(calculadora.PI) # 3.14159Ejemplo: Diferencia entre módulo y librería
Section titled “Ejemplo: Diferencia entre módulo y librería”# MÓDULO: Un solo archivoimport math # math es un módulo
# LIBRERÍA/PAQUETE: Colección de módulosimport datetime # datetime es una librería con múltiples componentesfrom datetime import date, time, datetime
# Librería externa (paquete complejo)# import pandas # pandas es una librería con muchos módulos📥 9.2 Uso de import y from … import
Section titled “📥 9.2 Uso de import y from … import”Sintaxis de import
Section titled “Sintaxis de import”| Sintaxis | Descripción |
|---|---|
import modulo | Importa el módulo completo |
from modulo import funcion | Importa elementos específicos |
import modulo as alias | Importa con un alias |
from modulo import * | Importa todo (no recomendado) |
Formas de importar
Section titled “Formas de importar”# Importar módulo completoimport math
# Importar elementos específicosfrom math import sqrt, pi
# Importar con aliasimport math as m
# Importar todo (evitar)from math import *Ventajas de cada forma
Section titled “Ventajas de cada forma”| Forma | Ventaja |
|---|---|
import modulo | Evita conflictos de nombres, claro de dónde viene cada función |
from modulo import | Código más limpio, acceso directo a funciones |
import as | Nombres cortos para módulos con nombres largos |
Buenas prácticas
Section titled “Buenas prácticas”- Imports al inicio: Colocar todos los imports al principio del archivo
- Orden: Estándar → Externos → Propios
- Evitar *: No usar
from modulo import *(contamina namespace) - Alias claros: Usar alias reconocibles (np para numpy, pd para pandas)
Ejemplo: import completo
Section titled “Ejemplo: import completo”# Importar módulo completoimport math
# Usar con prefijo del móduloprint(math.sqrt(16)) # 4.0print(math.pi) # 3.141592653589793print(math.pow(2, 3)) # 8.0
# Ventaja: Claro de dónde viene cada funciónEjemplo: from … import específico
Section titled “Ejemplo: from … import específico”# Importar elementos específicosfrom math import sqrt, pi, pow
# Usar directamente sin prefijoprint(sqrt(16)) # 4.0print(pi) # 3.141592653589793print(pow(2, 3)) # 8.0
# Ventaja: Código más limpioEjemplo: import con alias
Section titled “Ejemplo: import con alias”# Importar con aliasimport math as m
# Usar con alias cortoprint(m.sqrt(25)) # 5.0print(m.pi) # 3.141592653589793
# Común en librerías con nombres largosimport datetime as dtfecha = dt.date.today()print(fecha)Ejemplo: Comparación de métodos
Section titled “Ejemplo: Comparación de métodos”# MÉTODO 1: import completoimport randomnumero1 = random.randint(1, 10)
# MÉTODO 2: from importfrom random import randintnumero2 = randint(1, 10)
# MÉTODO 3: import con aliasimport random as rndnumero3 = rnd.randint(1, 10)
# Todos funcionan, elige según preferencia y contextoEjemplo: Importar múltiples elementos
Section titled “Ejemplo: Importar múltiples elementos”# Importar varios elementos en una líneafrom math import sqrt, pow, pi, e
print(sqrt(9)) # 3.0print(pow(2, 3)) # 8.0print(pi) # 3.141592653589793print(e) # 2.718281828459045
# O en múltiples líneas (más legible)from datetime import ( date, time, datetime, timedelta)📚 9.3 Librerías estándar: math, random, datetime
Section titled “📚 9.3 Librerías estándar: math, random, datetime”Resumen de librerías estándar
Section titled “Resumen de librerías estándar”| Librería | Propósito | Funciones principales |
|---|---|---|
| math | Funciones matemáticas avanzadas | sqrt(), pow(), ceil(), floor(), sin(), cos(), log() |
| random | Números aleatorios y selecciones | random(), randint(), choice(), shuffle(), sample() |
| datetime | Fechas, horas y operaciones temporales | date, time, datetime, timedelta |
Ejemplo: Librería math
Section titled “Ejemplo: Librería math”import math
# Raíces y potenciasprint(math.sqrt(25)) # 5.0print(math.pow(2, 3)) # 8.0print(math.pow(9, 0.5)) # 3.0 (raíz cuadrada)
# Redondeoprint(math.ceil(4.2)) # 5 (redondear arriba)print(math.floor(4.8)) # 4 (redondear abajo)
# Constantesprint(math.pi) # 3.141592653589793print(math.e) # 2.718281828459045
# Trigonometría (radianes)print(math.sin(math.pi/2)) # 1.0print(math.cos(0)) # 1.0
# Logaritmosprint(math.log(10)) # 2.302585092994046 (ln)print(math.log10(100)) # 2.0 (log base 10)Ejemplo: Librería random
Section titled “Ejemplo: Librería random”import random
# Número aleatorio entre 0 y 1print(random.random()) # Ej: 0.7234567
# Entero aleatorio en rangoprint(random.randint(1, 10)) # Ej: 7print(random.randint(1, 100)) # Ej: 42
# Número flotante en rangoprint(random.uniform(1.5, 5.5)) # Ej: 3.7821
# Elegir elemento aleatorio de listafrutas = ["manzana", "pera", "uva", "naranja"]print(random.choice(frutas)) # Ej: "pera"
# Mezclar listanumeros = [1, 2, 3, 4, 5]random.shuffle(numeros)print(numeros) # Ej: [3, 1, 5, 2, 4]
# Seleccionar múltiples elementosprint(random.sample(frutas, 2)) # Ej: ['uva', 'manzana']Ejemplo: Librería datetime
Section titled “Ejemplo: Librería datetime”from datetime import date, time, datetime, timedelta
# Fecha actualhoy = date.today()print(hoy) # 2024-01-15
# Fecha específicacumpleanos = date(1990, 5, 20)print(cumpleanos) # 1990-05-20
# Hora actualahora = datetime.now()print(ahora) # 2024-01-15 14:30:45.123456
# Componentes de fechaprint(hoy.year) # 2024print(hoy.month) # 1print(hoy.day) # 15
# Formatear fechaprint(ahora.strftime("%d/%m/%Y")) # 15/01/2024print(ahora.strftime("%H:%M:%S")) # 14:30:45print(ahora.strftime("%A, %d %B %Y")) # Monday, 15 January 2024
# Operaciones con fechas (timedelta)manana = hoy + timedelta(days=1)print(manana) # 2024-01-16
proxima_semana = hoy + timedelta(weeks=1)print(proxima_semana) # 2024-01-22
# Diferencia entre fechasdiferencia = hoy - cumpleanosprint(f"Días vividos: {diferencia.days}")Ejemplo: Uso integrado de las tres librerías
Section titled “Ejemplo: Uso integrado de las tres librerías”import mathimport randomfrom datetime import datetime
# Programa que usa las tres libreríasprint("=== PROGRAMA INTEGRADO ===\n")
# Usar mathradio = random.uniform(1, 10)area = math.pi * math.pow(radio, 2)print(f"Radio aleatorio: {radio:.2f}")print(f"Área del círculo: {area:.2f}\n")
# Usar randomdado = random.randint(1, 6)print(f"Lanzamiento de dado: {dado}\n")
# Usar datetimeahora = datetime.now()print(f"Fecha y hora: {ahora.strftime('%d/%m/%Y %H:%M:%S')}")📦 9.4 Instalación de librerías externas con pip
Section titled “📦 9.4 Instalación de librerías externas con pip”¿Qué es pip?
Section titled “¿Qué es pip?”pip (Package Installer for Python) es el gestor de paquetes oficial de Python. Permite instalar, actualizar y desinstalar librerías externas desde PyPI (Python Package Index).
Comandos principales
Section titled “Comandos principales”| Comando | Descripción |
|---|---|
pip install nombre | Instalar librería |
pip uninstall nombre | Desinstalar librería |
pip install --upgrade nombre | Actualizar librería |
pip list | Listar librerías instaladas |
pip show nombre | Ver información de librería |
pip freeze > requirements.txt | Exportar dependencias |
Librerías externas populares
Section titled “Librerías externas populares”| Librería | Propósito |
|---|---|
| requests | Realizar peticiones HTTP |
| pandas | Análisis de datos |
| numpy | Cálculos numéricos |
| matplotlib | Gráficos y visualización |
| flask | Framework web ligero |
| django | Framework web completo |
Entornos virtuales
Section titled “Entornos virtuales”- Propósito: Aislar dependencias por proyecto
- Crear:
python -m venv nombre_entorno - Activar (Windows):
nombre_entorno\Scripts\activate - Activar (Linux/Mac):
source nombre_entorno/bin/activate
Ejemplo: Instalar librería
Section titled “Ejemplo: Instalar librería”# En la terminal/consola (NO en Python)
# Instalar una libreríapip install requests
# Instalar versión específicapip install requests==2.28.0
# Instalar múltiples libreríaspip install requests pandas numpy
# Instalar desde requirements.txtpip install -r requirements.txtEjemplo: Comandos útiles de pip
Section titled “Ejemplo: Comandos útiles de pip”# Ver librerías instaladaspip list
# Ver información de una libreríapip show requests
# Actualizar libreríapip install --upgrade requests
# Desinstalar libreríapip uninstall requests
# Crear archivo de dependenciaspip freeze > requirements.txt
# Ver versión de pippip --versionEjemplo: Usar librería requests
Section titled “Ejemplo: Usar librería requests”# Primero instalar: pip install requestsimport requests
# Hacer petición GETrespuesta = requests.get('https://api.github.com')
# Ver código de estadoprint(f"Estado: {respuesta.status_code}") # 200
# Ver contenido JSONdatos = respuesta.json()print(f"Tipo: {type(datos)}")
# Ejemplo práctico: obtener datos de APIurl = 'https://jsonplaceholder.typicode.com/users/1'respuesta = requests.get(url)
if respuesta.status_code == 200: usuario = respuesta.json() print(f"Nombre: {usuario['name']}") print(f"Email: {usuario['email']}")else: print("Error en la petición")Ejemplo: Crear requirements.txt
Section titled “Ejemplo: Crear requirements.txt”# Archivo: requirements.txt# Lista de dependencias del proyecto
requests==2.31.0pandas==2.0.3numpy==1.24.3matplotlib==3.7.2
# Para instalar todas:# pip install -r requirements.txtEjemplo: Entorno virtual básico
Section titled “Ejemplo: Entorno virtual básico”# Crear entorno virtual (en terminal)python -m venv mi_entorno
# Activar entorno (Windows)mi_entorno\Scripts\activate
# Activar entorno (Linux/Mac)source mi_entorno/bin/activate
# Instalar librerías en el entornopip install requests pandas
# Desactivar entornodeactivate🛠️ 9.5 Uso práctico de módulos con ejemplos cotidianos
Section titled “🛠️ 9.5 Uso práctico de módulos con ejemplos cotidianos”Aplicaciones prácticas
Section titled “Aplicaciones prácticas”Los módulos y librerías permiten resolver problemas reales de manera eficiente sin reinventar la rueda.
Casos de uso comunes
Section titled “Casos de uso comunes”| Caso de uso | Módulo/Librería | Aplicación |
|---|---|---|
| Cálculos matemáticos | math | Operaciones complejas, trigonometría |
| Generación aleatoria | random | Juegos, simulaciones, muestreo |
| Manejo de fechas | datetime | Registros, cálculos temporales |
| Peticiones web | requests | Consumir APIs, web scraping |
| Análisis de datos | pandas | Procesar información, reportes |
Ejemplo 1: Calculadora científica
Section titled “Ejemplo 1: Calculadora científica”import math
def calculadora_cientifica(): print("=== CALCULADORA CIENTÍFICA ===\n")
numero = float(input("Ingresa un número: "))
print(f"\nResultados para {numero}:") print(f"Raíz cuadrada: {math.sqrt(numero):.2f}") print(f"Cuadrado: {math.pow(numero, 2):.2f}") print(f"Cubo: {math.pow(numero, 3):.2f}") print(f"Logaritmo natural: {math.log(numero):.2f}") print(f"Seno: {math.sin(numero):.2f}") print(f"Coseno: {math.cos(numero):.2f}")
calculadora_cientifica()Ejemplo 2: Juego de dados
Section titled “Ejemplo 2: Juego de dados”import random
def juego_dados(): print("=== JUEGO DE DADOS ===\n")
jugador1 = input("Nombre jugador 1: ") jugador2 = input("Nombre jugador 2: ")
print(f"\n{jugador1} lanza el dado...") dado1 = random.randint(1, 6) print(f"Resultado: {dado1}")
print(f"\n{jugador2} lanza el dado...") dado2 = random.randint(1, 6) print(f"Resultado: {dado2}")
print("\n" + "="*30) if dado1 > dado2: print(f"¡{jugador1} gana!") elif dado2 > dado1: print(f"¡{jugador2} gana!") else: print("¡Empate!")
juego_dados()Ejemplo 3: Calculadora de edad
Section titled “Ejemplo 3: Calculadora de edad”from datetime import date
def calcular_edad(): print("=== CALCULADORA DE EDAD ===\n")
# Solicitar fecha de nacimiento anio = int(input("Año de nacimiento: ")) mes = int(input("Mes de nacimiento (1-12): ")) dia = int(input("Día de nacimiento: "))
# Crear fecha de nacimiento nacimiento = date(anio, mes, dia) hoy = date.today()
# Calcular edad edad = hoy.year - nacimiento.year
# Ajustar si aún no ha cumplido años este año if (hoy.month, hoy.day) < (nacimiento.month, nacimiento.day): edad -= 1
# Calcular días vividos dias_vividos = (hoy - nacimiento).days
print(f"\nTienes {edad} años") print(f"Has vivido {dias_vividos:,} días") print(f"Próximo cumpleaños: {nacimiento.replace(year=hoy.year + 1)}")
calcular_edad()Ejemplo 4: Generador de contraseñas
Section titled “Ejemplo 4: Generador de contraseñas”import randomimport string
def generar_contrasena(longitud=12): """Genera una contraseña aleatoria segura."""
# Caracteres disponibles letras = string.ascii_letters # a-z, A-Z digitos = string.digits # 0-9 simbolos = "!@#$%^&*"
todos = letras + digitos + simbolos
# Generar contraseña contrasena = ''.join(random.choice(todos) for _ in range(longitud))
return contrasena
# Usar el generadorprint("=== GENERADOR DE CONTRASEÑAS ===\n")
cantidad = int(input("¿Cuántas contraseñas generar? "))longitud = int(input("Longitud de cada contraseña: "))
print(f"\nContraseñas generadas:")for i in range(cantidad): print(f"{i+1}. {generar_contrasena(longitud)}")Ejemplo 5: Sistema de registro con timestamp
Section titled “Ejemplo 5: Sistema de registro con timestamp”from datetime import datetimeimport random
def sistema_registro(): """Sistema de registro de eventos con timestamp."""
eventos = []
print("=== SISTEMA DE REGISTRO ===") print("Comandos: registrar, listar, salir\n")
while True: comando = input("Comando: ").lower()
if comando == "registrar": evento = input("Describe el evento: ") timestamp = datetime.now()
registro = { 'id': random.randint(1000, 9999), 'evento': evento, 'fecha': timestamp.strftime("%d/%m/%Y"), 'hora': timestamp.strftime("%H:%M:%S") }
eventos.append(registro) print(f"✅ Evento registrado con ID: {registro['id']}\n")
elif comando == "listar": if not eventos: print("No hay eventos registrados\n") else: print("\n" + "="*50) for e in eventos: print(f"ID: {e['id']}") print(f"Evento: {e['evento']}") print(f"Fecha: {e['fecha']} - Hora: {e['hora']}") print("-"*50) print()
elif comando == "salir": print("Saliendo del sistema...") break
else: print("Comando no reconocido\n")
sistema_registro()Ejemplo 6: Simulador de lanzamiento de moneda
Section titled “Ejemplo 6: Simulador de lanzamiento de moneda”import random
def simular_lanzamientos(cantidad): """Simula múltiples lanzamientos de moneda."""
caras = 0 cruces = 0
print(f"Simulando {cantidad} lanzamientos...\n")
for i in range(cantidad): resultado = random.choice(['Cara', 'Cruz'])
if resultado == 'Cara': caras += 1 else: cruces += 1
# Mostrar primeros 10 lanzamientos if i < 10: print(f"Lanzamiento {i+1}: {resultado}")
if cantidad > 10: print("...")
# Estadísticas print(f"\n{'='*30}") print("RESULTADOS:") print(f"{'='*30}") print(f"Caras: {caras} ({caras/cantidad*100:.1f}%)") print(f"Cruces: {cruces} ({cruces/cantidad*100:.1f}%)")
# Ejecutar simulacióncantidad = int(input("¿Cuántos lanzamientos? "))simular_lanzamientos(cantidad)🎯 Resumen de la lección
Section titled “🎯 Resumen de la lección”
🐝