Cierres de pitón

Cierres de pitón
Necesitamos comprender las funciones anidadas y las variables no locales antes de que podamos entender qué es el cierre de Python.

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:

    • Está anidado en la función.
    • Puede acceder a una variable gratuita fuera de su alcance.
    • La función circundante lo devuelve.

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:

    • Alcance global: La definición de una variable cuando está fuera de todas las funciones. Cualquier función en el código puede utilizar fácilmente una variable global.
    • Alcance local: Una variable es local para una función cuando se declara dentro de ella. Solo se puede acceder a una variable local desde el interior de los límites de dicha función donde se declara.
    • Alcance no local: Una variable asignada no es locala a sus funciones anidadas cuando se usa en la función circundante. La función en la que se definió una variable no local, así como todas sus funciones internas pueden acceder a esa variable.

Por qué utilizar cierres?

Las razones clave por las que contratamos decoradores se describen en la siguiente lista:

    • El hecho de que los cierres de Python ofrezcan alguna forma de enmascaramiento de datos como funciones de devolución de llamada son uno de los beneficios clave de emplearlos. En consecuencia, la utilización de variables globales disminuye
    • El tamaño del código se puede disminuir en algunas circunstancias utilizando los cierres en lugar de las clases.
    • Al reemplazar las constantes codificadas, los cierres son una excelente opción.
    • La función decorativa de los cierres es altamente beneficiosa.

¿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:

    • La función exterior debe proporcionarla de vuelta.
    • Algunas de las variables no locales de la función exterior deben ser capturadas por ella. Se puede acceder directamente a estas variables, declararse como variables no locales, o deben ser capturadas por un cierre anidado.

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.