Las funciones escritas en Python se consideran objetos de primera clase. El estado equivalente de los otros objetos se da a las funciones en Python. Las funciones se pueden crear y destruir dinámicamente, asignadas a variables, guardadas en colecciones, suministradas como argumentos y más. El término "funciones anidadas", a veces conocidas como "funciones internas", se refiere a las funciones que se definen dentro de las otras funciones.
Es una función anidada llamada Mensaje de compilación. Su función principal externa es donde se define y se llama.
En su forma más básica, el cierre es solo una función anidada que tiene acceso a una variable gratuita sobrante después de que se completa la ejecución de una función de encierra. Un cierre de pitón tiene estas tres propiedades:
Se dice que cualquier variable que no se desbloquee en el alcance local sea libre. Se requiere la palabra clave no local para que los cierres funcionen con variables inmutables como cadenas e enteros. Los cierres de Python ofrecen algún tipo de enmascaramiento de datos y ayudan a evitar el uso de variables globales.
Alcance de las variables
También debemos aprender sobre el alcance variable de Python para comprender los cierres más a fondo. El alcance es una región tal donde la variable es observable. Solo se puede utilizar el rango especificado de una variable. Según los tres ámbitos diferentes, las variables a menudo se pueden asignar en tres ubicaciones separadas:
Por qué utilizar cierres?
Las razones clave por las que contratamos decoradores se describen en la siguiente lista:
¿Cuándo crea Python el cierre??
Python crea un nuevo alcance cada vez que se invoca una función. Python también produce un nuevo cierre si esa función produce una.
Crear una función llamada multiplicador que produce primero un cierre. La multiplicación de dos entradas es lo que devuelve la función multiplicador. Pero utiliza un cierre en lugar de eso. Agregue tres llamadas a la función multiplicador a continuación. Se producen tres cierres llamando a estas funciones. Un número se multiplica por 2, 4 y 5 por cada función. Luego, ejecute las funciones de los cierres.
Ejemplo 1:
Para invocar una función interna desde fuera de la función exterior, primero debemos averiguar cómo. Estos métodos pueden devolver un valor. Aquí, "T" y "U" son variables locales de la función f ().
Dado que las variables "t" y "u" ya no se pueden acceder después de ejecutar h = f (), todas las variables de F (locales) se han ido. Sin embargo, aún conservamos el valor "t" que se devolvió y se guardó en h. Por lo tanto, podríamos hacer que la función exterior devuelva la función interior. Las funciones de primera clase de Python lo hacen factible para esto. Implica que debido a que Python interpreta las funciones como valores, puede asignarlas a las variables, proporcionarlas como argumentos de función o hacer que otra función las devuelva.
Ejemplo 2:
Este ejemplo muestra que la función interna "G" es devuelta por la función exterior F (t).
La función g () ahora es devuelta por la expresión f (t). Al asignar el valor de "G" a "H" cuando escribimos H = F (i), "H" ahora puede considerarse como "G" y tomar el argumento de G. H (j) es equivalente a llamar a "G" como resultado (j).
Ejemplo 3:
La función g (), no un valor particular de eso, es lo que f (t) devuelve. Tenga en cuenta esta instancia de esto y escriba lo siguiente:
Este código devuelve un error. Significa que encontramos un error. No podemos usar "H" para invocar una función ya que devolvemos el resultado de G (u) de F (t), que es una razón del error.
Ejemplo 4:
No tenemos que mantener f (a) en "H". La alternativa es llamar f (a) directamente (b). Considere la siguiente ilustración:
La necesidad de marcar una diferencia entre F (a, b) y f (a) siempre debe tenerse en cuenta (b). Requiere dos parámetros para llamar a la función f (a, b). La función f (a) (b), por otro lado, es una serie de funciones anidadas, cada una de las cuales solo acepta una entrada. Conocido como una función unaria, este tipo de función solo acepta una entrada. En consecuencia, F (a) (b) es una serie de dos funciones unaras anidadas. Entonces, F (a) se evalúa primero. Para encadenar estas funciones juntas, F (a) debería devolver una función. Aquí, devuelve la función interna "G". En consecuencia, f (a) (b) = g (b).
Ejemplo 5:
El uso de una serie más larga de funciones unarias es simplemente posible extendiendo el enfoque actual. Las tres funciones unaras anidadas también se pueden ver en este caso. La primera función, f (t), tiene una función dentro de ella llamada g (u), y g (u) tiene una función dentro de ella llamada h (v). Cada función interna es devuelta por su función exterior.
Aquí, definimos las funciones. Estas funciones devuelven los valores. A continuación, inicializamos tres variables y les asignamos tres enteros diferentes. Luego, llamamos a estas variables los atributos de la función.
Ejemplo 6:
Supongamos que hay algunas variables no locales en la función exterior. Veamos qué pasa.
Ejecutarlo demuestra que funciona sin problemas y que G (U) tiene acceso tanto a "T" como a "V". Sin embargo, ¿cómo es incluso concebible?? Ahora que estamos fuera del alcance de F (t), por lo tanto, "t" y "v" no deberían ser accesibles después de que se realice f (t). ¿Por qué G (U) todavía puede acceder a ellos?? Es por la razón que G (U), la función interna, ahora es un cierre.
Ejemplo 7:
Modificar la función interna utilizada en este caso.
Si eso sucede, ya no se puede decir que sea un cierre. La explicación es que G (U) no accede a las variables no locales "T" y "V". Por lo tanto, G (u) no está obligado a registrarlos.
Ejemplo 8:
En este caso, veremos si establecemos los valores de dos parámetros de las funciones iguales, entonces esa función se establece para ser un cierre o no.
Una vez más, se necesita "T" para inicializar "U" en este caso. Por lo tanto, G (U) no es un cierre porque "G" no necesita declarar "T".
Conclusión
En esta guía, hablamos sobre el cierre de Python. También ejecutamos los diferentes códigos relacionados con este tema. Requerimos una función dentro del cierre para definir lo siguiente:
En otras palabras, una función y un alcance ampliado con variables libres se consideran cierres. Llamar a la función exterior para devolver el cierre es necesario después de declarar el cierre para inicializarla.