Expresiones Lambda
Las expresiones lambda se usan idealmente cuando necesitamos hacer algo simple y estamos más interesados en hacer el trabajo rápidamente en lugar de nombrar formalmente la función. Las expresiones lambda también se conocen como funciones anónimas.
Las expresiones lambda en Python son una forma corta de declarar funciones pequeñas y anónimas (no es necesario proporcionar un nombre para las funciones lambda).
Las funciones Lambda se comportan como funciones normales declaradas con la palabra clave def
. Resultan útiles cuando se desea definir una función pequeña de forma concisa. Pueden contener solo una expresión, por lo que no son las más adecuadas para funciones con instrucciones de flujo de control.
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.
Código de ejemplo:
# Función Lambda para calcular el cuadrado de un número
square = lambda x: x ** 2
print(square(3)) # Resultado: 9
# Funcion tradicional para calcular el cuadrado de un numero
def square1(num):
return num ** 2
print(square(5)) # Resultado: 25
En el ejemplo de lambda anterior, lambda x: x ** 2
produce un objeto de función anónimo que se puede asociar con cualquier nombre. Entonces, asociamos el objeto de función con square
. De ahora en adelante, podemos llamar al objeto square
como cualquier función tradicional, por ejemplo, square(10)
Ejemplos de funciones lambda
Principiante
lambda_func = lambda x: x**2 # Funcion que recoge un número entero y devuelve su cuadrado
lambda_func(3) # Retorna 9
Intermedio
lambda_func = lambda x: True if x**2 >= 10 else False
lambda_func(3) # Retorna False
lambda_func(4) # Retorna True
Complejos
mi_dicc = {"A": 1, "B": 2, "C": 3}
sorted(mi_dicc, key=lambda x: my_dict[x]%3) # Retorna ['C', 'A', 'B']
Casos de uso
Supongamos que desea filtrar los números impares de una lista
. Podrías usar un bucle for
:
mi_lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtrado = []
for num in mi_lista:
if num % 2 != 0:
filtrado.append(num)
print(filtrado) # Python 2: impresión de filtrado
# [1, 3, 5, 7, 9]
O podría escribir esto en una línea con comprensión de listas (list-comprehensions). La compresión de listas ofrece una sintaxis más corta cuando deseas crear una nueva lista basada en los valores de una lista existente:
filtrado = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] if x % 2 != 0]
Pero es posible que tengas la tentación de utilizar la función integrada filter
. ¿Por qué? El primer ejemplo es demasiado detallado y la frase de una sola línea puede ser más difícil de entender. Pero filter
ofrece lo mejor de ambas palabras. Además, las funciones integradas suelen ser más rápidas.
mi_lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtrado = filter(lambda x: x % 2 != 0, mi_lista)
list(filtrado)
# [1, 3, 5, 7, 9]
NOTA: en Python 3, las funciones integradas devuelven objetos generadores, por lo que se debe llamar la función list
. La función list
crea un objecto de lista. En Python 2, por otro lado, devuelven una lista
, tupla
o string
.
¿Entonces qué ha ocurrido? Le dijiste a filter
que tomara cada elemento en mi_lista
y aplicara la expresión lambda. Los valores que devuelven False
se filtran.
Más información:
Traducido del artículo Lambda Expressions in Python