Funciones lambda en Python: guía con ejemplos

Función lambda compacta transformando una secuencia de datos en Python

Las funciones lambda en Python permiten definir operaciones pequeñas sin escribir una función convencional con def. Son útiles cuando la lógica es breve, se utiliza en un punto concreto y el nombre de una función independiente no aportaría claridad. Su forma general es lambda argumentos: expresión.

Cómo funciona una función lambda

Una lambda puede recibir cero, uno o varios argumentos, pero su cuerpo contiene una única expresión. Python evalúa esa expresión y devuelve el resultado de forma implícita:

doble = lambda numero: numero * 2
print(doble(7))  # 14

La misma operación con def ocuparía más líneas. Eso no convierte a lambda en una opción superior: simplemente reduce ruido cuando la transformación es evidente.

Varios argumentos y valores predeterminados

Los argumentos se separan por comas igual que en una función normal:

precio_final = lambda precio, descuento=0: precio * (1 - descuento)

print(precio_final(100, 0.15))
print(precio_final(80))

También admite argumentos nombrados. Conviene mantener la expresión corta; si necesita validaciones, varias ramas o manejo de errores, def suele ser más legible.

lambda con sorted

Uno de sus usos más claros es indicar el criterio de ordenación. En una lista de diccionarios puedes ordenar por una clave sin crear una función auxiliar:

productos = [
    {"nombre": "Teclado", "precio": 49},
    {"nombre": "Monitor", "precio": 230},
    {"nombre": "Ratón", "precio": 25},
]

ordenados = sorted(productos, key=lambda producto: producto["precio"])

El parámetro key recibe una función que transforma cada elemento en el valor utilizado para comparar. Para ordenar de mayor a menor, añade reverse=True.

Transformar y filtrar colecciones

map aplica una función a cada elemento y filter conserva aquellos para los que la función devuelve un valor verdadero:

ventas = [120, 80, 240, 55]
con_impuesto = list(map(lambda importe: importe * 1.21, ventas))
altas = list(filter(lambda importe: importe >= 100, ventas))

En Python moderno, una comprensión suele expresar mejor la intención:

con_impuesto = [importe * 1.21 for importe in ventas]
altas = [importe for importe in ventas if importe >= 100]

La comprensión evita encadenar map, filter y conversiones a lista. lambda sigue siendo valiosa en APIs que esperan una función, como sorted, min, max o determinadas operaciones de pandas.

Condiciones dentro de lambda

Una expresión condicional sí cabe en una lambda:

estado = lambda stock: "disponible" if stock > 0 else "agotado"

Es posible anidar condiciones, pero la legibilidad cae muy rápido. Si hay tres estados, reglas de negocio o excepciones, crea una función con def y pruebas unitarias.

Captura de variables y error de enlace tardío

Las lambdas creadas dentro de un bucle pueden sorprender porque consultan la variable cuando se ejecutan, no cuando se definen:

funciones = [lambda: i for i in range(3)]
print([f() for f in funciones])  # [2, 2, 2]

Puedes fijar el valor como argumento predeterminado:

funciones = [lambda i=i: i for i in range(3)]

Este detalle es importante en callbacks y tareas programadas.

Cuándo usar lambda y cuándo evitarla

Úsala para una transformación corta, local y obvia. Evítala si necesitas anotaciones claras, documentación, varias expresiones, depuración compleja o reutilización. Una lambda asignada a una variable durante todo el módulo suele indicar que la función merece un nombre con def.

Para un código profesional, prioriza la intención. nombres como calcular_total o validar_email explican más que una expresión compacta. Aplica formateadores y analiza cada lambda con la misma exigencia que el resto del código.

Lista de comprobación

Antes de dejar una lambda en producción, confirma que se entiende sin comentario, que no oculta efectos secundarios, que cubres valores vacíos y que una comprensión no sería más directa. Añade pruebas para límites y tipos inesperados. La brevedad solo aporta valor cuando conserva la claridad.

Continúa aprendiendo

Amplía este tema con nuestras guías sobre comprensión de listas en Python, diccionarios en Python, recopilar datos con Python.

Fuentes oficiales

Preguntas frecuentes

¿Qué es lambda en Python?
Es una expresión que crea una función anónima pequeña. Puede recibir varios argumentos, evalúa una sola expresión y devuelve su resultado.

¿Una lambda puede tener varias líneas?
No como cuerpo normal: se limita a una expresión. Si la lógica necesita varios pasos, utiliza una función definida con def.

¿Cuándo conviene lambda con sorted?
Cuando necesitas indicar de forma breve la clave de ordenación, por ejemplo el precio de cada diccionario o un atributo de un objeto.

¿Es mejor map con lambda o una comprensión?
Depende del caso, aunque las comprensiones suelen resultar más naturales y legibles en Python para transformar o filtrar listas.

¿Puede una lambda incluir if?
Sí, mediante una expresión condicional. Si hay múltiples ramas o reglas, una función convencional será más fácil de mantener.

¿Por qué las lambdas de un bucle devuelven el último valor?
Por el enlace tardío de la variable capturada. Puedes fijarla en el momento de creación mediante un argumento predeterminado.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir