Funciones lambda

Funciones lambda



Versión: 2.x, 3.x

Se trata de 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. Por lo tanto, 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á constituída 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 bien:

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 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).



Deja un comentario