Funciones Lambda

Funciones anónimas o funciones Lambda

En Python existe una manera de definir funciones sin la necesidad de usar la palabra reservada DEF ni devolver un resultado con la instrucción RETURN. Estas funciones carecen de identificador o nombre, es por eso que también se les conoce como anónimas y tienen la particularidad que ejecutan su funcionalidad en una sola línea, con lo cual deben ser funciones con un objetivo muy específico que permita resolverse en una sola línea de código,  con lo cual el objetivo principal de las funciones lambda es el de abreviar. Estas funciones lambda se asignan a una variable la cual Python va a entender que es un objeto del tipo función ya que posee parámetros y admite argumentos. De esta manera se va a poder llamar a la función lambda cuando sea necesario a traves de un objeto usado como si de una variable se tratara aunque en realidad es una función como ya comprobaremos en el siguiente código de ejempo:


def Sumar(x,y):
    return x+y

print(f'La suma de 3 + 2 usando funciones definidas es: {Sumar(3,2)}')

Suma = lambda x,y:x+y
iVariable = 10
print(f'La suma de 3 + 2 usando una función lambda es: {Suma(3,2)}')

print(f'''
La variable Suma es del tipo: {type(Suma)}
La función Sumar es del tipo: {type(Sumar)}
La variable iVariable es del tipo:  {type(iVariable)}''')

Resultado:

La suma de 3 + 2 usando funciones definidas es: 5
La suma de 3 + 2 usando una función lambda es: 5

La variable Suma es del tipo: <class 'function'>
La función Sumar es del tipo: <class 'function'>
La variable iVariable es del tipo:  <class 'int'>

El resultado demuestra que ambas funciones, tanto la función definida con el nombre Sumar como la función anónima lambda asignada a la variable Suma, haciendo el mismo trabajo de sumar dos valores. Como se puede comprobar la función lambda es mucho mas condensada y realiza el mismo trabajo. Otro detalle a destacar es que al invocar la función TYPE pasando como argumento ambas funciones y la variable iVariable, a a cual se le asignó un valor entero, los resultados de las clases a las que pertenecen tanto la variable Suma como la función Sumar son los mismos, ambos son objetos de la clase FUNCTION, a diferencia del objeto iVariable que pertenece a la clase INT. Esta última variable se ha colocado para comparar los tipos devueltos por la función TYPE, tanto de dicha variable como la "variable" Suma, pudiendo comprobar que ambos objetos, a pesar de ser usados como variables, pertenecen a clases distintas, resultando que el objeto Sumar pertenece a la clase FUNCTION a diferencia del objeto iVariable. Lo que hace que Sumar admita argumentos como cualquier otra función de su misma clase.

Un ejemplo práctico de la vida real del uso de funciones lambda podría ser el cálculo frecuente del área de una superficie. Supongamos que tenemos un programa que constantemente llama a uan función tradicional definida con el comando DEF cuyo único objetivo sea devolver el resultado de cálculo del área de un triángulo, que sería la base por la altura entre dos. Veamos como quedaría en el siguiente ejemplo usando una función estandar y una función lambda:

Función estandar:

import os
os.system('cls')

def area_triangulo(base,altura):
    return(base*altura/2)

base=int(input('Ingresse el valor de la base: '))
altura=int(input('Ingrese el valor de la altura: '))
print(f'El area del triangulo es:  {area_triangulo(base,altura)}')

Resultado ingresando 3 y 2:

Ingresse el valor de la base: 3
Ingrese el valor de la altura: 2
El area del triangulo es:  3.0

Función lambda:

import os
os.system('cls')

area=lambda base, altura:(base*altura/2)

base=int(input('Ingresse el valor de la base: '))
altura=int(input('Ingrese el valor de la altura: '))
print(f'El area del triangulo es:  {area(base,altura)}')

Resultado ingresando 3 y 2:

Ingresse el valor de la base: 3
Ingrese el valor de la altura: 2
El area del triangulo es:  3.0

Como podemos comprobar se ha simplificado la implementación de la función cálculo del area con e uso de la función anónima lambda y el resultado es el mismo.

Otro ejemplo de uso de funciones lambda con formato de datos:

import os
os.system('cls')

destaca_monto=lambda monto:"*** US$ {} ***".format(monto)

salario=30000

print(destaca_monto(salario))

Resultado:

*** US$ 30000 ***

Comentarios

Entradas populares