PythonFunciones AvanzadasLección 8 de 24
Comprehensions y Functools
Las comprehensions no son solo para listas. Las dict comprehensions crean diccionarios en una línea: {k: v for k, v in pares}. Las set comprehensions crean sets: {x*2 for x in numeros}. Los generator expressions son como list comprehensions pero no cargan todo en memoria, ideales para datasets grandes: sum(x**2 for x in rango).
El módulo functools de la librería estándar agrega herramientas de programación funcional. lru_cache es un decorador que memoriza resultados de llamadas anteriores, acelerando funciones costosas. partial crea versiones pre-configuradas de funciones. reduce aplica una función acumulativa a una secuencia.
# Dict comprehension
cuadrados = {x: x**2 for x in range(6)}
# {0:0, 1:1, 2:4, 3:9, 4:16, 5:25}
# Solo pares
pares_dict = {x: x**2 for x in range(10) if x % 2 == 0}
# Set comprehension
vocales_unicas = {letra for letra in "programacion" if letra in "aeiou"}
# {'a', 'o', 'i'}
# Nested comprehension - transponer matriz
matriz = [[1,2,3],[4,5,6],[7,8,9]]
transpose = [[fila[i] for fila in matriz] for i in range(3)]
# Walrus operator := (Python 3.8+)
numeros = [1, 2, 3, 4, 5, 6, 7, 8]
procesados = [y for x in numeros if (y := x**2) > 10]
# [16, 25, 36, 49, 64] — asigna y filtra en una línea
# functools
from functools import reduce, lru_cache, partial
# reduce - aplica función acumulativamente
producto = reduce(lambda a, b: a * b, [1, 2, 3, 4, 5])
print(producto) # 120
# lru_cache - memoización automática
@lru_cache(maxsize=None)
def fibonacci(n):
if n <= 1: return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(100)) # Instantáneo gracias al cache
print(fibonacci.cache_info()) # hits, misses, maxsize, currsize
# partial - función con argumentos prefijados
def potencia(base, exponente):
return base ** exponente
cuadrado = partial(potencia, exponente=2)
cubo = partial(potencia, exponente=3)
print(cuadrado(5)) # 25
print(cubo(3)) # 27
Consejo⚡ @lru_cache es la forma más fácil de agregar memoización. Convierte cualquier función recursiva lenta en una rápida con una sola línea.
Practica esta lección
Resuelve los ejercicios del curso de Python en la app, gratis y con corrección automática.
Empezar a practicar