DEV Community

Jerry W.
Jerry W.

Posted on • Edited on

Closures y decorators en Python

Funciones anidadas
Son funciones que están creadas dentro de otra función

Ejemplo de una función anidada

Closure

Es una forma de acceder a variables de otros scopes a través de una nested function. Se retorna la nested function y esta recuerda el valor que imprime, aunque a la hora de ejecutarla no este dentro de su alcance.

Reglas para tener un closure

  1. Debemos tener una nested function.
  2. La nested function debe referenciar un valor de un scope superior.
  3. La función que envuelve la nested debe retornarla también.

Ejemplo:

def make_division_by(n):
    """
    This closure returns a function that returns the division of an x number by n
    """
    def division(x):
        return x/n

    return division

division_by_3 = make_division_by(3)
print(division_by_3(18))
Enter fullscreen mode Exit fullscreen mode

El resultado del closure, lo que se imprime de division_by_3(18) es:

6.0
Enter fullscreen mode Exit fullscreen mode

Decorators

Es una función que recibe como parámetro otra función, le añade cosas, y retorna una función diferente.

def mayusculas(func):
    def envoltura(texto):
        return func(texto).upper()
    return envoltura

@mayusculas
def mensaje(nombre):
    return f'{nombre}, recibiste un mensaje'

print(mensaje('Cesar'))
Enter fullscreen mode Exit fullscreen mode

Aquí la función mayusculas recibe a la función mensaje y en función envoltura (wrapper) la ejecuta agregandole algo má, en este caso aplicandole un upper al string texto y la retorna.
Al imprimir mensaje('Cesar') lo que obtenemos al final es

CESAR, RECIBISTE UN MENSAJE
Enter fullscreen mode Exit fullscreen mode

Top comments (0)