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.
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
def doble(numero):
return numero * 2
doble_corto = lambda numero: numero * 2En 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:
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:
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
def longitud(nombre):
return len(nombre)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().
Leo | Marta | Cristina
La salida aparecerá aquí.
Necesito una pista
- La lambda recibe
nombrey devuelvelen(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))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
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
- Localizar qué parámetros recibe antes de los dos puntos.
- Leer la expresión de la derecha como el valor que devuelve.
- Identificar quién utiliza esa pequeña función, como
sorted().
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.