Saltar a contenido
 No os perd谩is mi futuro contenido, seguidme en y Youtube 馃榿

Funciones lambda

Si empiezo diciendo que las funciones o expresiones lambda sirven para crear funciones an贸nimas, posiblemente me dir茅is 驴qu茅 me est谩s contando?, as铆 que vamos a tomarlo con calma, pues estamos ante unas de las funcionalidades m谩s potentes de Python a la vez que m谩s confusas para los principiantes.

Una funci贸n an贸nima, como su nombre indica es una funci贸n sin nombre. 驴Es posible ejecutar una funci贸n sin referenciar un nombre? Pues s铆, en Python podemos ejecutar una funci贸n sin definirla con def. De hecho son similares pero con una diferencia fundamental:

El contenido de una funci贸n lambda debe ser una 煤nica expresi贸n en lugar de un bloque de acciones.

Y es que m谩s all谩 del sentido de funci贸n que tenemos, con su nombre y sus acciones internas, una funci贸n en su sentido m谩s trivial significa realizar algo sobre algo. Por tanto podr铆amos decir que, mientras las funciones an贸nimas lambda sirven para realizar funciones simples, las funciones definidas con def sirven para manejar tareas m谩s extensas.

Si deconstruimos una funci贸n sencilla, podemos llegar a una funci贸n lambda. Por ejemplo tomad la siguiente funci贸n para doblar un valor:

Note

def doblar(num):
    resultado = num*2
    return resultado

doblar(2)
4

Vamos a simplificar el c贸digo un poco:

Note

def doblar(num):
    return num*2

Todav铆a m谩s, podemos escribirlo todo en una sola l铆nea:

Note

def doblar(num): return num*2

Esta notaci贸n simple es la que una funci贸n lambda intenta replicar, fijaros, vamos a convertir la funci贸n en una funci贸n an贸nima:

Note

lambda num: num*2
<function __main__.<lambda>>

Aqu铆 tenemos una funci贸n an贸nima con una entrada que recibe num, y una salida que devuelve num * 2.

Lo 煤nico que necesitamos hacer para utilizarla es guardarla en una variable y utilizarla tal como har铆amos con una funci贸n normal:

Note

doblar = lambda num: num*2

doblar(2)
4

Gracias a la flexibilidad de Python podemos implementar infinitas funciones simples.

Por ejemplo comprobar si un n煤mero es impar:

Note

impar = lambda num: num%2 != 0

impar(5)
True

Darle la vuelta a una cadena utilizando slicing:

Note

revertir = lambda cadena: cadena[::-1]

revertir("Hola")
'aloH'

Incluso podemos enviar varios valores, por ejemplo para sumar dos n煤meros:

Note

sumar = lambda x,y: x+y

sumar(5,2)
7

Como v茅is podemos realizar cualquier cosa que se nos ocurra, siempre que lo podamos definir en una sola expresi贸n.

A continuaci贸n veremos como explotar al m谩ximo la funci贸n lambda utiliz谩ndola en conjunto con otras funciones como filter() y map().


脷ltima edici贸n: 6 de Octubre de 2018