Nested Function

Son funciones que se encuentran creadas dentro de otra función

def main():
	a=1
	def nested():
		print(a)
	nested()

main()
#resultado
>>1
def main():
	a=1
	def nested():
		print(a)
	return nested()

my_func=main()
my_func()

#resultado
>>1

Closure

El closure es esta técnica que tienen las funciones para recordar los valores de scopes superiores

def main():
	a=1
	def nested():
		print(a)
	return nested()

my_func=main()
my_func()

del(main)
my_func()
#resultado
>> 1
	 1

reglas para encontrar 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

cuando tenemos una clase que tiene solo un método cuando trabajamos con decoradores

Donde aparecen los closure

En clases cortas y cuando trabajamos con decoradores