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 def
palabra clave. 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 los más adecuados para funciones con instrucciones de flujo de control.
Sintaxis de una función Lambda
lambda arguments: expression
Las funciones Lambda pueden tener cualquier número de argumentos, pero solo una expresión.
Código de ejemplo
# Lambda function to calculate square of a number square = lambda x: x ** 2 print(square(3)) # Output: 9 # Traditional function to calculate square of a number def square1(num): return num ** 2 print(square(5)) # Output: 25
En el ejemplo 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
. Entonces, de ahora en adelante, podemos llamar al square
objeto como cualquier función tradicional, por ejemplosquare(10)
Ejemplos de funciones lambda
Principiante
lambda_func = lambda x: x**2 # Function that takes an integer and returns its square lambda_func(3) # Returns 9
Intermedio
lambda_func = lambda x: True if x**2 >= 10 else False lambda_func(3) # Returns False lambda_func(4) # Returns True
Complejo
my_dict = {"A": 1, "B": 2, "C": 3} sorted(my_dict, key=lambda x: my_dict[x]%3) # Returns ['C', 'A', 'B']
Caso de uso
Supongamos que desea filtrar los números impares de a list
. Podrías usar un for
bucle:
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] filtered = [] for num in my_list: if num % 2 != 0: filtered.append(num) print(filtered) # Python 2: print filtered # [1, 3, 5, 7, 9]
O podría escribir esto como una línea con listas por comprensión:
filtered = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] if x % 2 != 0]
Pero puede tener la tentación de utilizar la filter
función incorporada. ¿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.
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] filtered = filter(lambda x: x % 2 != 0, my_list) list(filtered) # [1, 3, 5, 7, 9]
NOTA: en Python 3, las funciones integradas devuelven objetos del generador, por lo que debe llamar list
. En Python 2, por otro lado, devuelven a list
, tuple
o string
.
¿Entonces qué pasó? Dijo filter
que tomara cada elemento my_list
y aplicara las expresiones lambda. Los valores que devuelven False
se filtran.
Más información:
- Documentos oficiales