Inicio > Cursos > Python > Comprehensions y Functools
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.
← Funciones y ParámetrosItertools y Programación Funcional →

Practica esta lección

Resuelve los ejercicios del curso de Python en la app, gratis y con corrección automática.

Empezar a practicar