Funciones lambda en Python: cuándo usarlas (y cuándo no)
Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción
Imagina que tienes que dejarle a alguien una nota rápida: "Vuelvo en 5 minutos". No escribirías una carta formal con saludo, tres párrafos y firma. La apuntarías en una nota adhesiva y listo.
Las funciones lambda son las notas adhesivas de Python. Son funciones diminutas, anónimas y desechables, para cuando necesitas algo rápido de una sola línea y un bloque def completo sería demasiado.
En este tutorial aprenderás a escribir funciones lambda, dónde brillan (ordenar, filtrar, transformar) y, algo igual de importante, cuándo conviene dejarlas de lado y usar una función normal.
Cómo escribir una función lambda
Una función lambda se crea con la palabra clave lambda, seguida de los parámetros, dos puntos y una sola expresión. Esa expresión se devuelve automáticamente, sin necesidad de la palabra clave return.
10 10
La sintaxis es: lambda parameters: expression. No hay nombre de función (por eso se llaman "anónimas"), ni def, ni return, ni un cuerpo de varias líneas. Solo una expresión que se evalúa y se devuelve.
Las lambdas pueden recibir varios parámetros, igual que las funciones normales:
10 Ada Lovelace
Usar lambda con sorted()
El uso más común de las funciones lambda es como argumento key de sorted(). El parámetro key le dice a Python: "antes de comparar los elementos, transforma cada uno con esta función".
['Bob', 'Charlie', 'alice'] ['alice', 'Bob', 'Charlie']
La lambda lambda name: name.lower() le indica a sorted() que compare la versión en minúsculas de cada cadena. Las cadenas originales no cambian: la lambda solo afecta a la comparación.
Las lambdas son especialmente útiles para ordenar datos complejos, como listas de tuplas o de diccionarios:
Charlie: 72 Alice: 88 Diana: 91 Bob: 95
Mouse: $25 Keyboard: $75 Laptop: $999
Usar lambda con map() y filter()
map() aplica una función a cada elemento de una lista y te devuelve los resultados transformados. filter() conserva solo los elementos para los que la función devuelve True. Las dos reciben una función como primer argumento: el lugar perfecto para una lambda.
[2, 4, 6, 8, 10] [2, 4]
Envolvemos map() y filter() en list() porque devuelven iteradores perezosos (lazy), no listas. La llamada a list() los obliga a producir todos los resultados de una vez.
Aquí tienes un ejemplo más práctico, en el que se extraen y filtran datos:
[11.55, 26.39, 5.5, 49.5, 14.03] [23.99, 45.0]
doubled = list(map(
lambda x: x * 2, numbers
))
evens = list(filter(
lambda x: x % 2 == 0, numbers
))doubled = [x * 2 for x in numbers]
evens = [x for x in numbers
if x % 2 == 0]Lambda frente a def: cuándo usar cada una
Las lambdas son tentadoras porque parecen ingeniosas y compactas. Pero tienen limitaciones reales. Así puedes decidir cuál usar:
Usa lambda cuando:
key=, map() o filter()Usa `def` cuando:
if/else, bucles o manejo de errores['apple', 'banana', 'cherry'] ['apple', 'banana', 'cherry']
Patrones comunes con lambda
Estos son algunos patrones que verás en código Python real. Reconocerlos te ayudará a leer el código de otras personas y a saber cuándo una lambda es la herramienta adecuada.
Alex: 30 Zara: 22
even odd
awesome is
Ejercicios de práctica
¿Qué imprime este código? Escribe la salida exacta.
operation = lambda a, b: a * b + 1
print(operation(3, 4))
print(operation(0, 10))Dada una lista de palabras, usa sorted() con una lambda para ordenarlas por su último carácter. Imprime la lista ordenada que obtienes.
Usa esta lista: words = ['hello', 'world', 'python', 'code']
Salida esperada: ['world', 'code', 'python', 'hello']
Dada una lista de números, usa filter() con una lambda para quedarte solo con los números mayores que 10 y después usa map() con una lambda para elevar al cuadrado cada número restante. Imprime la lista final.
Usa esta lista: numbers = [3, 15, 7, 20, 8, 12]
Salida esperada: [225, 400, 144]
Dada una lista de tuplas de estudiantes (name, gpa), ordénalas por promedio de mayor a menor usando sorted() con una lambda. Imprime cada estudiante en una línea aparte con el formato name: gpa.
Usa esta lista:
students = [('Alice', 3.5), ('Bob', 3.9), ('Charlie', 3.2), ('Diana', 3.7)]Salida esperada:
Bob: 3.9
Diana: 3.7
Alice: 3.5
Charlie: 3.2Dada una lista de palabras, usa sorted() con una lambda para ordenarlas por longitud (las más cortas primero). Si dos palabras tienen la misma longitud, deben aparecer en orden alfabético. Imprime la lista ordenada.
Usa esta lista: words = ['fig', 'apple', 'date', 'kiwi', 'banana', 'pear', 'plum']
Salida esperada: ['fig', 'date', 'kiwi', 'pear', 'plum', 'apple', 'banana']