Funciones anidadas
Son funciones que están creadas dentro de otra función
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
- Debemos tener una nested function.
- La nested function debe referenciar un valor de un scope superior.
- 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))
El resultado del closure, lo que se imprime de division_by_3(18) es:
6.0
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'))
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
Top comments (0)