Expresiones Lambda en Python

Las expresiones lambda idealmente son usadas cuando necesitamos hacer algo simple pero de una manera rápida sin escribir el código formal de siempre con python. Es por ello que las expresiones lambda son conocidas como funciones anónimas.

Funciones Lambda

Como en la introducción menciono, las expresiones lambda son consideradas funciones anónimas puesto que realizan el mismo trabajo de una función común que se declara con la palabra clave def , y una de las diferencias es su uso orientado a ejecutar pequeños procedimientos.

# Función lambda para calcular la potencia de un número
potencia = lambda x: x ** 2
print(potencia(3)) # Salida: 9

# Función tradicional para calcular la potencia de un número
def potencia(num):
  return num ** 2
print(potencia(5)) # Salida: 25

En el ejemplo de arriba lambda x: x ** 2 crea una función anónima que puede ser asociada con cualquier nombre al que sea igualado. En este caso, lo igualamos a la palabra potencia , de manera que podemos llamar en todo momento al objeto potencia como si de una función tradicional se tratara. Por ejemplo: potencia(3)

Ejemplos de funciones lambda

En el siguiente ejemplo asignamos un objeto lambda a lambda_exp , para después utilizarlo. Básicamente la rutina a realizar calcular la potencia de un número.

lambda_exp = lambda x: x**2 
resultado = lambda_exp(3)
print(resultado) #Salida: 9

Un ejemplo un tanto complejo, seria el siguiente:

lambda_func = lambda x: True if x**2 >= 10 else False
lambda_func(2) # Retorna Falso
lambda_func(7) # Retorna True

En el cuál, determinamos con sintaxis lambda; que si el cuadrado del parámetro pasado es mayor al número 10. Fácil verdad?

Y aquí un ejemplo de mayor complejidad, en el cuál requiero ordenar las llaves de un diccionario de acuerdo a sus valores, un ejemplo clásico.

dicc = {"A": 1, "B": 2, "C": 3}
resultado = sorted(dicc, key=lambda x: dicc[x]%3)
print(resultado)  # Salida ['C', 'A', 'B']

Si te interesa saber más de python básico te dejo este enlace: Como programar en python? Preguntas y respuestas – 2018

Un caso real

Bien, a partir de los ejemplos anteriores inferimos el uso que podemos darle a las expresiones lambda.

Como este caso en el que deseamos filtrar los números impares de una lista.

#Forma tradicional
lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
impares = []

for num in lista:
     if num % 2 != 0:
         impares.append(num)

print(impares) # Salida: [1, 3, 5, 7, 9]

O también, puede ser escrito con un singleline for.

impares = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] if x % 2 != 0]

Pero quizá te veas tentando en usar la función filter. Ya que el ejemplo anterior es un poco engorroso para entender. Y se vería de esta forma:

lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

impares = filter(lambda x: x % 2 != 0, lista)

list(impares) # Resultado [1, 3, 5, 7, 9]

Ojo: El ejemplo anterior trabaja en python 3.

Entonces cual es la explicación del código de arriba?

Bien usando filter decimos: Toma cada elemento de la lista, y pásalo a la función lambda. Aquellos valores que retornen False, serán filtrados 😀

Excelente, entonces. Por hoy es suficiente pero si deseas saber más te dejo la documentación oficial en el enlace: https://docs.python.org/3/reference/expressions.html#lambda