Funciones lambda

Funciones lambda

Actualizado el 19/02/2023.

La palabra reservada lambda permite crear funciones de manera rápida, just in time, sobre la marcha, para prototipos ligeros que requieren únicamente de una pequeña operación o comprobación. Toda función lambda también puede expresarse como una convencional (pero no viceversa).

Función lambda

En la imagen se observa cómo está constituida una función lambda y en comparación a una convencional. En color verde se remarcan los argumentos y en rojo el valor de retorno. En base a esto, se conforma de la siguiente manera:

lambda argumentos: resultado

O también asignándola a una variable:

f = lambda argumentos: resultado

Y es equivalente a:

def f(argumentos):
    return resultado

Al igual que en las convencionales, en las funciones lambda pueden utilizarse argumentos opcionales o bien ninguno, retornar cualquier tipo de valor o bien None. Algunos ejemplos y sus equivalencias:

>>> def f(x, y, z=1):
...     return (x+y) * z
>>> f(5, 6)
11
>>> f(5, 6, 7)
77
>>> f = lambda x, y, z=1: (x+y) * z
>>> f(5, 6)
11
>>> f(5, 6, 7)
77

>>> def f():
...     return
>>> print(f())
None
>>> f = lambda: None
>>> print(f())
None

Sin embargo, las funciones están siempre diferenciadas, aunque tengan comportamiento y resultados equivalentes.

>>> def a(x):
...     return x * 5
>>> b = lambda x: x * 5
>>> a
<function a at 0x0238C7B0>
>>> b
<function <lambda> at 0x0238CA70>
>>> a == b
False
>>> a is b
False

La razón por la cual querrás emplear este tipo de funciones es simplemente por rapidez (durante el desarrollo, no en la ejecución) y, en ciertos casos, claridad del código. Veamos un ejemplo práctico.

La función filter(funcion, iterable) construye una lista con aquellos elementos en los cuales funcion(iterable[i]) retorna True. Por lo tanto, si se quieren mantener los números mayores a cero de una determinada lista, podría utilizarse:

>>> a = [0, 1, -1, -2, 3, -4, 5, 6, 7]
>>> b = filter(lambda x: x > 0, a)
>>> b
[1, 3, 5, 6, 7]

Que es equivalente a:

def f(x):
    return x > 0
b = filter(f, a)

Como se puede observar, la segunda opción se ve más explícita (tres líneas), aunque la primera actúa de forma similar en menor cantidad de código (una línea).

Curso online 👨‍💻

¡Ya lanzamos el curso oficial de Recursos Python en Udemy! Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter en 2024.

Consultoría 💡

Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.

2 comentarios.

Deja una respuesta