Función lambda en Python
En este artículo veremos qué es la función lambda en Python y cómo utilizarlas para la transformación de estructuras.
¿Qué es la función lambda?
La función lambda es una función anónima. Estas funciones son aquellas que no tienen nombre al ser definidas. En Python, la palabra clave lambda
se utiliza para definir las funciones anónimas en vez de utilizar la palabra reservada def
utilizada en las funciones normales.
A diferencia de la funciones definidas en Python las funciones lambda solo pueden contener una sola expresión en su implementación por lo que no podrán ser utilizadas cuando más una sentencia sea requerida.
Sintaxis
La sintaxis de una función lambda es muy diferente que la de una función normal. A continuación se muestra una función ejemplo que retorna un número aleatorio entre 0 y 100.
La función es definida utilizando la palabra reservada def
y se le asigna el nombre ejemplo
. Dentro de la función se especifica su implementación. Luego, para ejecutar esa función se la llama por su nombre y el valor resultante se guarda en una variable.
import random
def ejemplo():
return round(random.random()*100)
valor = ejemplo()
print(valor)
#91
Para transformar este código en una función lambda se iguala la variable ejemplo
(qué contendrá la función resultante) a la definición de la misma. Toda función de este tipo comenzará con la palabra reservada lambda
. Para indicar indicar el principio de la implementación se colocan :
y finalmente se especificará la única expresión que contendrá la función.
Para ejecutar esta implementación se debe llamar a la variable ejemplo
y el resultado de la misma quedará guardado en la variable valor
.
import random
ejemplo = lambda : round(random.random()*100)
valor = ejemplo()
print(valor)
#62
En el caso de no querer retornar la función en sí y solo necesitar el valor resultante de la ejecución de la función puede llamarse al conjunto utilizando los paréntesis al final como el llamado de cualquier función. Es necesario que toda la sintaxis de la función lambda se encuentre a su vez entre paréntesis.
import random
valor = (lambda:round(random.random()*100))()
print(valor)
#72
De esta manera se reduce la definición y ejecución de la función en una sola linea.
Argumentos
Para que una función lambda permita el uso de argumentos los nombres de estos deben ser definidos antes del inicio de la implementación de la función.
En el siguiente ejemplo se muestra una función que toma como argumentos una variable x
. Esta función genera un número aleatorio cuyo límite inferior es 0 y el límite superior es el valor de x.
import random
ejemplo = lambda x : round(random.uniform(0,x))
valor = ejemplo(10)
print(valor)
Para que la función lambda acepte más de un argumento estos deben separarse por comas.
En el siguiente ejemplo tanto el límite superior como el inferior están dados por los valores de los argumentos x
e y
respectivamente.
import random
ejemplo = lambda x,y : round(random.uniform(x,y))
valor = ejemplo(20,40)
print(valor)
#35
Es posible pasar los valores de argumentos en la llamada de la función para definir y ejecutar la función en una sola linea.
import random
valor = lambda x,y : round(random.uniform(x,y)),(20,40)
print(valor)
#28
Usos de la función lambda
Este tipo de función es particularmente útil cuando se usa en combinación con otras funciones de Python para la transformación de estructuras de datos. A continuación se listan algunos de los usos más comunes.
Mapeo de elementos
Es posible utilizar una función lambda con la función ma
p para aplicar una transformación a cada elemento de una lista. En el siguiente ejemplo se toma cada número de la lista números
y se obtiene el cubo del mismo dando como resultado una lista de los cubos de los valores originales.
import random
numeros = [1, 2, 3, 5, 8]
cubos = list(map(lambda x: x**3, numeros))
print(cubos)
#[1, 8, 27, 125, 512]
Filtrado
Utilizando la función lambda con la función filter
es posible filtrar una lista de elementos a partir de una condición. En el siguiente ejemplo se filtrará la lista números
verificando si cada valor es mayor o igual a 30. El resultado será una lista conteniendo solo los valores de la lista original que cumplen con la condición.
import random
numeros = [23,12,53,22,56,32,12]
numeros = list(filter(lambda x: x >= 30, numeros))
print(numeros)
#[53, 56, 32]
Ordenamiento
Es posible utilizar la función lambda
con la función sort para generar condiciones de ordenamiento personalizadas. Para especificar el tipo de ordenamiento deseado se utiliza el argumento key
de la función sort
, utilizando una función lambda puede definirse la transformación que sufrirá cada elemento al ser ordenado.
En el siguiente ejemplo se ordenan los nombres de la lista como si todos los valores estuvieran en mayúsculas. Es importante aclarar que la lista en sí no es modificada, esta transformación solo es usada para obtener el ordenamiento de los elementos.
import random
personas = ["María", "Pedro", "Ana", "maría", "ana"]
personas.sort(key=lambda x: x.upper())
print(personas)
#['Ana', 'ana', 'María', 'maría', 'Pedro']
Reducción de datos
Combinando la función lambda con la función reduce de functools para aplicar una transformación a una lista o secuencia y obtener como salida un valor. En el siguiente ejemplo se tomará una lista de valor y a partir de la función reduce se irán multiplicando los valores de manera acumulativa hasta dar por salida el resultado de sus productos.
import random
from functools import reduce
numeros = [1, 2, 3, 4, 5]
producto = reduce(lambda x, y: x * y, numeros)
print(producto)
#120
En este artículo hemos visto los principios de las funcionen lambda
de Python. También hemos visto cómo definir y pasar argumentos de estás funciones y hemos visto algunos de los usos más comunes en combinación con las funciones map
, filter
, reduce
y sort
.