La función lambda es una función anónima (sin nombre) definida mediante la palabra clave lambda. Se utiliza generalmente donde se necesita una función corta "una vez y en su lugar".
add = lambda x, y: x + y print(add(1, 2)) # 3
Limitaciones de las funciones lambda:
Cuándo es útil una lambda:
sorted, filter, map).Cuándo es mejor evitar la lambda:
Pregunta: ¿Pueden las funciones lambda utilizar variables del ámbito externo y cómo afecta esto a su comportamiento dentro de los bucles?
Respuesta: Las funciones lambda pueden capturar variables del contexto externo (cierre léxico). Al definirse dentro de un bucle, esto a menudo lleva a un comportamiento inesperado: la lambda utiliza el valor actual de la variable en el momento de la llamada, no el que "había en el momento de la definición".
funcs = [] for i in range(3): funcs.append(lambda: i) # todas las funciones devolverán 2 (i=2 después del bucle) print([f() for f in funcs]) # [2, 2, 2]
Para capturar el valor "antiguo":
funcs = [] for i in range(3): funcs.append(lambda i=i: i) print([f() for f in funcs]) # [0, 1, 2]
Historia
En el proyecto se utilizó la lambda para filtrar una lista de diccionarios por una clave determinada. La lambda dentro del bucle capturó una variable que en el momento de la llamada tenía otro valor (inesperado). Resultado: filtración incorrecta y errores en los informes.
Historia
Gran proyecto en Django: una forma compleja de validación, implementada como una larga expresión dentro de una función lambda. Posteriormente, la lógica del negocio cambió, la lambda dejó de contener todo el código, se tuvo que reescribir en una función normal. La lambda ralentizó la depuración.
Historia
En una startup se aplicó de manera fallida la lambda para pasar la función de ordenación, olvidando que devuelve un tipo incorrecto (por ejemplo, no una tupla, sino una lista). Esto provocaba una ordenación impredecible y errores en la deduplicación de datos.