Python - Tips Avanzados para Dominar Contextos y Caché
🔥 Colección de trucos poco comunes de Python que realmente facilitan la vida del desarrollador
¿Cansado de escribir código repetitivo o poco elegante? Aquí tienes una selección de herramientas subestimadas que pueden transformar tu flujo de trabajo como desarrollador Python 🐍✨
🌀 1. functools.cached_property — propiedades perezosas con caché
Ideal para cálculos costosos o llamadas a APIs que no deberían repetirse innecesariamente. Esta propiedad se evalúa una sola vez y luego se almacena en caché para futuras llamadas 🧠💾
from functools import cached_property
import time
class DataFetcher:
@cached_property
def heavy_data(self):
print("⏳ Solicitando datos...")
time.sleep(2)
return {"status": "ok", "data": [1, 2, 3]}
obj = DataFetcher()
print(obj.heavy_data) # Primera llamada → calcula
print(obj.heavy_data) # Segunda llamada → usa caché
🔁 Ejemplo adicional: cálculo de estadísticas pesadas
class Stats:
def __init__(self, numbers):
self.numbers = numbers
@cached_property
def average(self):
print("📊 Calculando promedio...")
return sum(self.numbers) / len(self.numbers)
stats = Stats([10, 20, 30])
print(stats.average)
print(stats.average) # No recalcula
🪄 2. contextlib.suppress — ignorar errores con elegancia
Evita bloques try/except innecesarios cuando el error es esperable y no crítico. Útil para operaciones como eliminar archivos, cerrar sockets o acceder a recursos opcionales 🧘♂️
import os
from contextlib import suppress
with suppress(FileNotFoundError):
os.remove("tmp.txt")
🧪 Ejemplo adicional: cerrar múltiples sockets sin romper el flujo
from contextlib import suppress
sockets = [None, open("/dev/null", "rb"), None]
for sock in sockets:
with suppress(AttributeError):
sock.close()
🧩 3. Tu propio gestor de contexto con __enter__ / __exit__
Permite encapsular lógica de apertura y cierre de recursos, como archivos, conexiones o configuraciones temporales. Además, puedes manejar errores dentro del contexto sin romper el programa 🛠️🔐
class DemoResource:
def __enter__(self):
print("🔓 Recurso abierto")
return self
def __exit__(self, exc_type, exc_value, traceback):
print("🔒 Recurso cerrado")
if exc_type:
print(f"⚠️ Error detectado: {exc_value}")
return True # Suprime la excepción
with DemoResource() as res:
print("⚡ Procesando...")
raise ValueError("¡Algo salió mal!")
🧪 Ejemplo adicional: gestor de archivo temporal
class TempFile:
def __init__(self, filename):
self.filename = filename
def __enter__(self):
print(f"📁 Creando archivo temporal: {self.filename}")
self.file = open(self.filename, "w")
return self.file
def __exit__(self, exc_type, exc_value, traceback):
self.file.close()
print(f"🧹 Eliminando archivo: {self.filename}")
with suppress(FileNotFoundError):
os.remove(self.filename)
with TempFile("temp.txt") as f:
f.write("Contenido temporal")
🗄️ Ejemplo final: simulación de conexión a base de datos
class FakeDBConnection:
def __enter__(self):
print("🔌 Conectando a la base de datos...")
self.db = {"users": ["Alice", "Bob", "Charlie"]}
return self.db
def __exit__(self, exc_type, exc_value, traceback):
print("📴 Cerrando conexión a la base de datos...")
if exc_type:
print(f"🚨 Error durante la operación: {exc_value}")
return False # No suprime la excepción
try:
with FakeDBConnection() as db:
print("👥 Usuarios:", db["users"])
raise RuntimeError("Falla simulada en la consulta")
except RuntimeError as e:
print("🧯 Manejado externamente:", e)
💡 Estos trucos no solo hacen tu código más limpio y profesional, sino que también te ayudan a escribir con intención, claridad y resiliencia. ¡Úsalos para brillar como desarrollador! 🚀
#PythonTips #CleanCode #DevLife #PythonTricks #CodeSmart #BackendMagic #Pythonista #DesarrolloElegante #TrucosPython #ContextManagers