viernes, 10 de abril de 2026

¡Domina la eficiencia con Funciones Generadoras y yield! 馃馃捑

Seguimos optimizando c贸mo manejas grandes vol煤menes de datos. Ya vimos las List Comprehensions (creaci贸n r谩pida) y las Generator Expressions (ahorro de memoria). Es el momento de llevar ese ahorro a tus propias funciones.

¿Sab铆as que una funci贸n est谩ndar calcula todos los resultados, los guarda en una lista en la RAM y luego te los devuelve? Si la lista es enorme, tu programa puede colapsar por falta de memoria. Mira este contraste visual: import sys # ❌ FUNCI脫N EST脕NDAR (Guarda todo en RAM) def cuadrado_lista(n): resultado = [] for i in range(n): resultado.append(i * i) return resultado # Devuelve la lista completa n = 10_000_000 # 10 millones p1_lista = cuadrado_lista(n) #print(p1_lista) # ¡Cuidado si lo imprimes! print(f"RAM Lista (est谩ndar): {sys.getsizeof(p1_lista) / 1024 / 1024:.2f} MB") # Salida: ~80-90 MB (dependiendo de tu arquitectura) La alternativa Pythonic es usar una Funci贸n Generadora. En lugar de un return final, usas la palabra clave yield dentro de un bucle. yield pausa la ejecuci贸n, devuelve el valor actual y "recuerda" el estado para continuar justo donde se qued贸 la pr贸xima vez que se lo pidas con next(). # ✅ FUNCI脫N GENERADORA (Calcula bajo demanda ✨) def cuadrado_generador(n): for i in range(n): yield i * i # Devuelve el valor, pausa y recuerda estado p2_gen = cuadrado_generador(n) # No calcula nada a煤n #print(p2_gen) # Salida: <generator object...> print(f"RAM Objeto Generador: {sys.getsizeof(p2_gen)} bytes") # Salida: ~100-200 bytes (¡Pr谩cticamente nada!) ¿Por qu茅 usar yield y Funciones Generadoras? Consumo de RAM 铆nfimo: Procesas flujos de datos gigabytes o infinitos sin saturar la memoria, ya que solo guardas el estado actual de la funci贸n. C谩lculo perezoso (Lazy Evaluation): Ideal para procesar archivos l铆nea por l铆nea, data streams, o cuando solo necesitas los primeros resultados de una b煤squeda compleja. Encadenamiento elegante: Puedes crear pipelines de datos encadenando generadores para transformaciones eficientes. ¡Deja de acumular datos y empieza a fluir con ellos usando yield! 馃殌馃捑 M谩s trucos de rendimiento y buenas pr谩cticas aqu铆 馃憞 馃帴 https://www.youtube.com/@josecodetech/




No hay comentarios:

Publicar un comentario

Se procedera a revision para su pronta publicacion en caso de que no incumpla las normas de blogger.