lunes, 22 de septiembre de 2025

馃悕Python - Tips Avanzados para Dominar Contextos y Cach茅馃馃摑

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.

 
>