Estas son las tres principales características de las funciones lambda con Python:
- Son funciones anónimas
- Solo pueden contener una expresión
- No necesitan la palabra return para retornar un resultado.
lambda argumentos : expresión
# Se ejecuta la expresión y se devuelve un resultado
Función lambda en Python
Las funciones lambda de Python se pueden asignar a variables y después llamar a esa variable.
Veamos antes de nada un ejemplo básico de función lambda:
saludo = lambda: print('Hola')
saludo()
# Hola
Otro ejemplo de función lambda pero enviando una cadena de texto como argumento.
saludo = lambda nombre: print(f'Hola {nombre}')
saludo('Luis')
# Hola Luis
Ahora realizaremos una función para hacer una determinada operación. Recuerda que las funciones lambda admiten todos los parámetros que necesites.
calculo = lambda a, b, c, d: print(((a + b) * c) / d)
calculo(1, 2, 3, 4)
# 2.25
El envío de argumentos se puede realizar de la misma forma que con el resto de funciones de Python.
Podemos asignar valores por defecto a los parámetros; asignar un número indeterminado de parámetros, e incluso definir nuestra función lambda con parámetros de clave: valor.
Veamos un ejemplo con cada tipo:
Lambda con valores por defecto
Como vemos en el ejemplo, podemos llamar a la función enviando un argumento o los dos. En caso de que solo enviemos uno, tomará el valor por defecto que hayamos asignado para el segundo.
suma = lambda a, b=5: a + b
suma(3)
# 8
suma(10, 10)
# 20
Lambda con número indeterminado de argumentos
En caso de que no conociéramos la cantidad de números que van a ser enviados para sumar, tendríamos que hacer uso del * para nuestra función lambda.
suma = lambda *numeros: sum(numeros)
suma(3, 5, 4, 5, 6)
# 23
Lambda + comprehensions
Para rizar un poco más el rizo, podemos aplicar Comprehensions sobre las funciones lambda. Estaríamos recorriendo una lista de elementos y realizando alguna operación sobre estos elementos.
Para este ejemplo voy a recorrer un string y agregaré un ‘▓’ por cada carácter de la cadena de texto.
agrego_simbolo = lambda palabra: print([letra+'▓' for letra in palabra])
agrego_simbolo('Badajoz')
# ['B▓', 'a▓', 'd▓', 'a▓', 'j▓', 'o▓', 'z▓']
Por ejemplo, podríamos haberlas pasado todas a mayúsculas:
mayusculas = lambda palabra: print([letra.upper() for letra in palabra])
mayusculas('Badajoz')
# ['B', 'A', 'D', 'A', 'J', 'O', 'Z']
Incluso podríamos generar una nueva lista aplicando modificaciones únicamente a los elementos que filtrásemos de la lista.
En este ejemplo detectaremos cuántas letras a minúsculas aparecen y las transformaremos en el símbolo ‘▓’. El resultado será una lista con un número de símbolos ‘▓’ igual al número de letras que se incluyan en la palabra.
a_simbolo = lambda palabra: print(['▓' for letra in palabra if letra == 'a'])
a_simbolo('Badajoz')
# ['▓', '▓']
a_simbolo('abracadabra')
# ['▓', '▓', '▓', '▓', '▓']
Desde el enlace puedes acceder a la documentación oficial de Python en la que se habla sobre las funciones lambda.