¿Cómo usar lambdas y para qué?
La parte más interesante de usar lambdas aparece cuando puedes usarlas en su forma pura - como partes anónimas de código destinadas a evaluar un resultado.
Imagina que necesitamos una función (la nombraremos imprimirfuncion
) que imprime los valores de una (otra) función dada para un conjunto de argumentos seleccionados.
Queremos que imprimirfuncion
sea universal - debería aceptar un conjunto de argumentos incluidos en una lista y una función a ser evaluada, ambos como argumentos; no queremos codificar nada.
Mira el ejemplo en el editor. Así es como hemos implementado la idea.
Analicémoslo. La función imprimirfuncion()
toma dos parámetros:
- El primero, una lista de argumentos para los que queremos imprimir los resultados.
- El segundo, una función que debe invocarse tantas veces como el número de valores que se recopilan dentro del primer parámetro.
Nota: También hemos definido una función llamada poli()
- esta es la función cuyos valores vamos a imprimir. El cálculo que realiza la función no es muy sofisticado: es el polinomio (de ahí su nombre) de la forma:
f(x) = 2x2 - 4x + 2
El nombre de la función se pasa a imprimirfuncion()
junto con un conjunto de cinco argumentos diferentes: el conjunto está construido con una cláusula de comprensión de la lista.
El código imprime las siguientes líneas:
f(-2)=18
f(-1)=8
f(0)=2
f(1)=0
f(2)=2
¿Podemos evitar definir la función poli()
, ya que no la vamos a usar más de una vez? Sí, podemos: este es el beneficio que puede aportar una función lambda.
Mira el ejemplo de abajo. ¿Puedes ver la diferencia?
def imprimirfuncion(args, fun):
for x in args:
print('f(', x,')=', fun(x), sep='')
imprimirfuncion([x for x in range(-2, 3)], lambda x: 2 * x**2 - 4 * x + 2)
La función imprimirfuncion()
se ha mantenido exactamente igual, pero no hay una función poli()
. Ya no la necesitamos, ya que el polinomio ahora está directamente dentro de la invocación de la función imprimirfuncion()
en forma de una lambda definida de la siguiente manera: lambda x: 2 * x**2 - 4 * x + 2
.
El código se ha vuelto más corto, más claro y más legible.
Permítenos mostrarte otro lugar donde las lambdas pueden ser útiles. Comenzaremos con una descripción de map()
, una función de Python incorporada. Su nombre no es demasiado descriptivo, su idea es simple y la función en sí es muy utilizable.