Módulos Avanzados de la Biblioteca Estándar
La biblioteca estándar de Python incluye potentes módulos especializados que resuelven problemas habituales de estructuras de datos, programación funcional, manipulación de iteradores y gestión de recursos sin requerir dependencias externas.
1. El módulo collections: Estructuras de Datos Especializadas #
1from collections import Counter, defaultdict, deque 2 3# 1. Counter: recuento de frecuencias automático 4palabras = ["python", "java", "python", "c", "python", "java"] 5conteo = Counter(palabras) 6print(conteo.most_common(2)) # Las 2 más comunesSalida de consola [('python', 3), ('java', 2)]
2. El módulo functools: Utilidades para Funciones y Caché #
A) Memoización ultrarrápida con @lru_cache y @cache #
Guarda en memoria los resultados de funciones puras o pesadas para evitar recalcular:
1from functools import cache, lru_cache 2 3@cache # Equivalente a @lru_cache(maxsize=None) en Python 3.9+ 4def fibonacci(n: int) -> int: 5 if n < 2: 6 return n 7 return fibonacci(n - 1) + fibonacci(n - 2) 8 9print(fibonacci(50)) # Cálculo instantáneoSalida de consola 12586269025
B) Creación de funciones parciales con partial #
Fija argumentos de funciones existentes para crear nuevas funciones más específicas:
1from functools import partial 2 3def multiplicar(a: int, b: int) -> int: 4 return a * b 5 6duplicar = partial(multiplicar, 2) 7triplicar = partial(multiplicar, 3) 8 9print(duplicar(10)) 10print(triplicar(10))Salida de consola 20 30
3. El módulo itertools: Iteradores Eficientes en Memoria #
itertools permite procesar secuencias de datos de manera perezosa (lazy), consumiendo el mínimo de memoria RAM:
1import itertools 2 3# 1. chain: encadena múltiples iterables de forma continua 4letras = itertools.chain(["A", "B"], ["C", "D"], ["E"]) 5print(list(letras))Salida de consola ['A', 'B', 'C', 'D', 'E']
4. El módulo contextlib: Creación Ágil de Context Managers #
Con el decorador @contextmanager, puedes transformar cualquier función generadora con yield en un gestor de contexto para la sentencia with:
1import time 2from contextlib import contextmanager 3 4@contextmanager 5def temporizador(etiqueta: str): 6 inicio = time.perf_counter() 7 print(f"[{etiqueta}] Iniciando...") 8 try: 9 yield 10 finally: 11 duracion = time.perf_counter() - inicio 12 print(f"[{etiqueta}] Finalizado en {duracion:.4f} segundos") 13 14with temporizador("Procesamiento"): 15 total = sum(x**2 for x in range(100000))
Resumen del tema
Conceptos clave #
collections:Counter: recuento y ranking de elementos con.most_common().defaultdict: inicialización automática de claves ausentes.deque: colas de doble extremo de alta velocidad O(1).
functools:@cache/@lru_cache: memoización automática de cálculos deterministas.partial: preconfiguración de parámetros para crear funciones derivadas.@wraps: preserva docstrings y metadatos en decoradores personalizados.
itertools: generadores eficientes comochain,islice,cycle,groupbyycombinations.contextlib: simplifica la creación de gestores de contexto mediante el decorador@contextmanageryyield.
Qué debes recordar #
Aprovecha la biblioteca estándar de Python: usa Counter/defaultdict para manipular datos, @cache para optimizar funciones y itertools para procesar secuencias con memoria mínima.