Saltar al contenido principal
eLearner.app
Módulo 5 · Lección 4 de 420/36 en el curso~10 min
Lecciones del módulo (4/4)

Lambda y funciones de orden superior

Una lambda es una función anónima, definida en una sola línea. Sintaxis:

Python
lambda parametri: espressione

Equivalente a def, pero más concisa y adecuada para funciones "desechables" para pasar a otras funciones.

Python
quadrato = lambda x: x ** 2
quadrato(5)    # 25

# equivalent to:
def quadrato(x):
    return x ** 2

Diferencias frente a def

Aspectodeflambda
nombreobligatorioanónimo
cuerpomúltiples sentenciasuna SOLA expresión
retornoexplícitoimplícito (la expresión)
docstringno

Sin return dentro de una lambda: el valor de la expresión ES el resultado.

Cuándo usar lambda

Casi siempre: como argumento key para funciones de ordenación o selección.

Python
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']

key=len le dice a sorted: "para comparar dos elementos, usa su longitud". Para criterios personalizados, usa lambda:

Python
utenti = [
    {"nome": "Ada", "eta": 36},
    {"nome": "Linus", "eta": 54},
    {"nome": "Grace", "eta": 85},
]
per_eta = sorted(utenti, key=lambda u: u["eta"])
# sorted by ascending age

Otros usos típicos: min(...), max(...), filter(...), map(...).

Python
nums = [-3, 1, -4, 1, -5, 9]
max(nums, key=lambda n: abs(n))   # -5 (maximum by absolute value)

Funciones de orden superior

Una función es de orden superior si acepta una función como argumento o devuelve una. sorted, max, filter, map son de orden superior. Lambda existe precisamente para facilitar las llamadas de orden superior.

Cuándo evitar las funciones lambda

Las funciones lambda son útiles para operaciones cortas y de un solo uso (como la ordenación rápida). Sin embargo, si te encuentras asignando una lambda a una variable (ej. double = lambda x: x * 2), generalmente se prefiere usar un bloque def estándar por razones de legibilidad y depuración (ya que las funciones definidas con def conservan sus nombres reales en los rastreos de errores).

Pruébalo tú

Ejercicio#python.m5.l4.e1
Intentos: 0Cargando...

Dada la lista `words = ['banana', 'kiwi', 'mela', 'fragola']`, ordénala por longitud ascendente en `by_length`. Evalúa `by_length`.

Cargando editor...
Mostrar pista

key=len (o lambda p: len(p)).

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#python.m5.l4.e2
Intentos: 0Cargando...

Dada la lista de tuplas `points = [(1, 5), (3, 2), (2, 4)]`, ordénalas por el SEGUNDO elemento en orden ascendente y asígnalas a `by_y`. Evalúa `by_y`.

Cargando editor...
Mostrar pista

lambda p: p[1]

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#python.m5.l4.e3
Intentos: 0Cargando...

Define una función `lambda` anónima que tome un número `x` y devuelva `True` si el número es par, y `False` en caso contrario. Asigna la lambda a la variable `is_even` y pruébala con `is_even(8)` como última línea.

Cargando editor...
Mostrar pista

Escribe is_even = lambda x: x % 2 == 0 y luego llama a is_even(8).

Solución disponible después de 3 intentos