Expresiones Lambda en Python

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 defpalabra 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 ** 2produce 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 squareobjeto 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 forbucle:

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 filterfunció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 filterofrece 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, tupleo string.

¿Entonces qué pasó? Dijo filterque tomara cada elemento my_listy aplicara las expresiones lambda. Los valores que devuelven Falsese filtran.

Más información:

  • Documentos oficiales