Funciones lambda, listas por compresión, decoradores y otras curiosidades pitónicas

Python es un lenguaje precioso, o por lo menos así me lo parece a mí, por tanto procedo a contarte aspectos, funciones y otras cosilla que a mí me llaman la función.

Funciones lambda

Las funciones lammbda son funciones anónimas, es decir no se declaran con un nombre, su sintáxis es: lambda <argumentos> : <expresión>
Un ejemplo sencillo podría ser:


In [6]:
cuadrado = lambda a: a*a
cuadrado(2)


Out[6]:
4

Por su sencillez se suelen utilizar como argumentso en funciones más simples como map o filter, antes de ejemplificar, para ver mejor su utilidad introduciré el concepto de listas por comprensión.

Listas por compresión

La creación de listas por compresión, refleja el concepto matemático de definir un conjunto, en este caso lista, a partir de una defición. Dando lugar a definiciones elegantes y rápidas:


In [27]:
print( "Lista por compresión: " ,[ i for i in range(10)] )
l = list( map(lambda x : x*x ,range(10) ))
print( f"Esta preciosa lista { l } es resultado de la anterior")
print( f"Los números impares son: { list( filter( lambda x: x%2 , range(10)) )}")
[ (x,y) for x in range(3) for y in range(3,7,2)] #productos cartesianos


Lista por compresión:  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Esta preciosa lista [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] es resultado de la anterior
Los números impares son: [1, 3, 5, 7, 9]
Out[27]:
[(0, 3), (0, 5), (1, 3), (1, 5), (2, 3), (2, 5)]

Espero que haya estado usted fino y haya notado el uso del "nuevo" format en el print de python :D

Decoradores

Los decoradores son funciones que modifican el comportarmiento de las funciones sobre las que se aplican. Esto se ve mejor con un ejemplo:


In [43]:
def sumandos(f):
    def nueva_funcion(a,b):
        print(f'Se están sumando {a} y {b}')
        f(a,b)
    return nueva_funcion
@sumandos
def suma(a,b):
    return a+b
suma(1,2)


Se están sumando 1 y 2