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
0 comentarios:
Publicar un comentario
¿Tienes alg煤n comentario? ¿Qu茅 te ha parecido este art铆culo? Cu茅ntalo.