Lección 20 de 45 · Funciones

Funciones lambda

Entiende lambda como una función pequeña que puedes entregar justo donde otra operación necesita un criterio.

Paso a pasoTraducción de sintaxisAmpliación opcional
Índice · Lección 20/45
Esta lección no pretende que uses lambda en todas partes

lambda aparece mucho en ejemplos de Python y al principio puede parecer una sintaxis extraña. Tu objetivo aquí es más modesto: aprender a leerla y reconocer cuándo una función diminuta encaja bien.

Si una lambda hace el código más difícil de entender, una función normal con def sigue siendo la mejor opción.

Evidencia de aprendizaje

Traducir entre def y lambda para poder leer funciones pequeñas sin convertirlas en un truco de sintaxis.

Traduce primero a una función que ya conoces

Dos formas de expresar la misma operación
def doble(numero):
    return numero * 2

doble_corto = lambda numero: numero * 2

En ambos casos hay una entrada llamada numero y un resultado numero * 2. En la lambda no escribes return: el valor de su única expresión se devuelve automáticamente.

Para leerla: interpreta lambda x: expresión como «una función que recibe x y devuelve expresión».

Su lugar más natural es junto a otra operación

Una lambda suele tener sentido cuando otra función necesita un pequeño criterio temporal. sorted(), por ejemplo, puede recibir una función que indique por qué valor ordenar:

Ordenar nombres por longitud
nombres = ["Cristina", "Leo", "Marta"]
ordenados = sorted(nombres, key=lambda nombre: len(nombre))
print(ordenados)

sorted() toma cada nombre y pregunta a la lambda cuál es su longitud. Ordena usando esos números como criterio.

La lambda no «ordena» por sí misma; solo responde la pregunta que sorted() necesita.

Una sola expresión es una frontera útil

Lambda está pensada para lógica pequeña. Si necesitas varias instrucciones, variables intermedias, comentarios o una explicación larga, deja de comprimir:

Cuando un nombre ayuda más
nombres = ["Cristina", "Leo", "Marta"]

def longitud_del_nombre(nombre):
    return len(nombre)

ordenados = sorted(nombres, key=longitud_del_nombre)

Esta versión ocupa más líneas, pero puede ser mejor si el criterio necesita crecer o merece un nombre propio.

Descomprime una lambda antes de usarla

Versión con nombre
def longitud(nombre):
    return len(nombre)
Misma idea temporal
lambda nombre: len(nombre)

La segunda forma no añade una capacidad nueva. Es una forma corta de entregar una función pequeña a otra operación.

Sustituye la función con nombre por una lambda equivalente dentro de sorted().

Salida esperada
Leo | Marta | Cristina
lambda.py
La salida aparecerá aquí.

Necesito una pista
  • La lambda recibe nombre y devuelve len(nombre).
  • Puedes escribirla directamente después de key=.
Ver una solución razonada
nombres = ["Cristina", "Leo", "Marta"]
ordenados = sorted(nombres, key=lambda nombre: len(nombre))
print(" | ".join(ordenados))
Lección de enriquecimiento: si prefieres def porque el criterio merece un nombre, úsalo. Saber leer lambdas es más importante que escribirlas por costumbre.

La señal de que has comprimido demasiado

Si al volver al código dentro de una semana tienes que descifrar una lambda durante varios segundos, probablemente merecía convertirse en una función con nombre. El objetivo de lambda no es demostrar que sabes escribir código corto; es evitar una definición separada cuando la operación es obvia y local.

Recupera lo anterior · minuto 4

Sin mirar apuntes

Una función recibe una lista de nombres y debe devolver solo los tres primeros en mayúsculas. ¿Qué conocimientos anteriores combinarías?

Comprobar

Parámetro para recibir la lista, slicing [:3], recorrido o comprehension para transformar con .upper() y return para devolver la nueva colección.

Qué deberías poder hacer al verla en código ajeno

  1. Localizar qué parámetros recibe antes de los dos puntos.
  2. Leer la expresión de la derecha como el valor que devuelve.
  3. Identificar quién utiliza esa pequeña función, como sorted().
Dominio suficiente de lambda

Si puedes convertir mentalmente lambda x: x + 1 en una función normal con def y explicar por qué se usaría como argumento de otra función, no necesitas practicar sintaxis más compleja.