Las expresiones lambda tambi茅n son conocidas como funciones an贸nimas, debido a que son funciones a las que no se les proporciona un nombre. A pesar de que se comportan como lo har铆an las funciones normales declaradas con la palabra clave def, se usan idealmente cuando necesitamos hacer algo simple y por 煤nica vez, permitiendo que la funci贸n sea creada en el mismo lugar donde se necesite, empleando menos l铆neas de c贸digo y evitando crear y almacenar en memoria una funci贸n que solo se utilizar谩 una vez. Como requisito, pueden contener solo una expresi贸n, por lo que no son las m谩s adecuadas si debemos implementar instrucciones de flujo de control.
En una funci贸n tradicional, se declara la funci贸n con la palabra clave def, se le da un nombre y entre par茅ntesis los argumentos que recibir谩 la funci贸n. Puede haber tantas l铆neas de c贸digo como se desee, con todas las expresiones y declaraciones que sean necesarias. Pero algunas veces solo ser谩 necesario una expresi贸n dentro de tu funci贸n (sin importar la cantidad de argumentos), lo cual se convierte en un buen escenario de uso de una funci贸n lambda.
Sintaxis de una funci贸n Lambda
lambda argumentos: expresi贸n
Las funciones Lambda pueden tener cualquier n煤mero de argumentos, pero solo una expresi贸n.
Algunos ejemplos de uso:
Funci贸n que recoge un n煤mero entero y devuelve su cuadrado
cuadrado = lambda x: x**2
cuadrado(5) # Retorna 25
Funci贸n que verifica si un n煤mero es par, devolviendo True cuando es, y False cuando no lo es:
es_par = lambda x: True if x % 2 == 0 else False
es_par(3) # Retorna False
es_par(4) # Retorna True
En los casos anteriores, hemos asignado las funciones lambda a objetos (cuadrado y es_par, respectivamente). Sin embargo, los casos de uso m谩s interesantes de las funciones lambda son cuando podemos utilizarlas, por ejemplo, como argumento de la funciones m谩s avanzadas, como map y filter. Por ejemplo, a continuaci贸n empleamos una funci贸n lambda como argumento de la funci贸n filter, a fines de poder conservar 煤nicamente los valores pares de la lista del segundo argumento:
mi_lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtrado = filter(lambda x: x % 2 == 0, mi_lista)
list(filtrado) # [2, 4, 6, 8, 10]