Función anidada:
Una función anidada se define dentro de otra función. Estas funciones pueden acceder a una variable de la función exterior. La variable no local a la que podemos acceder dentro de su alcance.
Ex:
defouter_fun (s):Producción:
En el ejemplo anterior, el inner_fun es una función anidada, y MSG es una variable no local. Podemos acceder a estos dentro del cuerpo externo_fun.
Definición de cierre:
El cierre de Python es una función anidada. Podemos acceder a la variable fuera del alcance. Este concepto es esencial para comprender los decoradores de Python.
Todas las funciones anidadas no son cierres. Los siguientes tres criterios deben reunirse para definir un cierre:
Ex:
#Definir funciones anidadasProducción:
En el ejemplo anterior, el Greet_msg es la función exterior. Esto crea una función interna (greed_msg es el cierre aquí), y se devuelve.
La función exterior gree_msg devuelve una función print_msg y se asigna a la variable call_fun. Aquí vemos que la función exterior terminó su ejecución, pero aún podemos acceder a la variable MSG.
Cómo modificar la variable dentro del cierre:
Usando una palabra clave no local, podemos modificar la variable dentro de la función interna.
Ex: Sin usar una palabra clave no local. Aquí estamos tratando de modificar la variable NUM dentro del cierre y obtuvimos UnboundLocalError porque Python cree que NUM es una variable local y NUM no está definida dentro de la diversión ().
defgenerate_num ()::Producción:
Ex: Con usar no local palabra clave. En el siguiente ejemplo que usa la palabra clave no local, podremos modificar la variable NUM.
defgenerate_num ()::Producción:
Escribiremos más ejemplo usando un cierre:
Ex: Esto imprimirá argumentos aprobados y el nombre de la función
defouter (func):Producción:
Ex: En el siguiente ejemplo, cada vez que se llama al cierre, los valores se agregarán a una lista y agregarán todos los valores de la lista y luego devolverán un valor.
Defaddition ():Producción:
Ex: En este ejemplo, multiplique el número de parámetro de función interna por parámetro de función exterior
Def multiply_by_number (m):
Producción:
Conclusión:
El cierre de Python es una función anidada. Con esto, podemos evitar usar variables globales utilizando variables no locales. Esto proporciona algunos datos ocultando y comprensión de este concepto útil para construir un decorador de Python.