Camino Python aprender - cierre de función y decorador

Muchos contacto inicial a socio menor de la pitón no puede entender lo que los cierres son, ¿por qué los cierres, cierres de uso, entonces hoy de bloggers en los tres puntos que explican el cierre pitón

En primer lugar, ¿cuál es el cierre

  • La definición oficial:
    la ciencia En el ordenador, los cierres (en inglés: Cierre), también conocido como cierres léxicos (Cierre léxico) o una función de cierre (cierres de función), es una referencia a la función de las variables libres. Este variables libres referenciados y existirán esta función juntos, incluso si se ha dejado a la creación de un ambiente no es una excepción. Por lo tanto, hay otra forma de decir que el cierre es una combinación de entidades y funciones asociadas con los mismos referencias hechas ambiente. Los cierres pueden tener múltiples instancias de tiempo de ejecución, diferente entorno de referencia y pueden generar la misma función de una combinación de diferentes instancias.

  • Entiendo
    dentro de una función anidada de una función, la referencia de función y un variables locales externos en la función, entonces esta función se llama cierres internos

  • Los cierres de Python

    implementación de Python de cierres debido a Python es un lenguaje de programación orientado a objetos, la función no es una excepción en Python, en función de Python también como un objeto (objeto de función) se forma
    a continuación un vistazo a un ejemplo que claro:
    Aquí Insertar imagen Descripción
    aquí en primer lugar definir una función, entonces utilizamos métodos internos de Python (tipo), el papel del tipo (args) es mirar a los argumentos de entrada de parámetros tipo, podemos ver el tipo de func es un objeto función
    todos sabemos que la función puede devolver valores, por lo que en función de Python objeto o como un valor de retorno, lo que proporciona la base para la aplicación de los cierres.

    : Aquí nos fijamos en Python cierre realización
    Aquí Insertar imagen Descripción
    interior, donde en primer lugar definir una función llamada externa, y luego dentro de esta función se define una variable llamada "out_value", y luego otra vez en la función Se define una función interna llamada interior y dentro de la función interna citamos una función variable externa (exterior), por lo que llamamos para el cierre interior

    Nos fijamos en el cierre de algunas de las propiedades
    Aquí Insertar imagen Descripción
    que llamamos y ejecuta la función externa y regresamos valor a la variable f, podemos ver a través de impresión, el tipo de variable F en función del tipo, porque es un objeto de la función f necesariamente ' _ llamada _ '(es decir, () es una función que se ejecuta después de la función) atributos y luego vamos a ver el nombre de la variable f, se puede ver que f es un objeto de función llamada interior, ¿por qué esto es así es porque la aplicación de la función externa después de la terminación, en el momento de su retorno que volveremos en el objeto función interior definido dentro de la función externa, por lo que el nombre de la variable a f interior

Ahora que entendemos la implementación básica de cierres de pitón, a continuación, veamos algunos ejemplos:
Aquí Insertar imagen Descripción
El ejemplo anterior vemos en ausencia de respuestas, que supongo que lo que va a pasar, podríamos haber algunos socios pequeños hemos visto a través de esta transmisión de la enfermedad, el resultado de un socio pequeño no vio esa parte de la mente no es
0
1
2
? de modo que yo no adivinando aquí, de hecho, por encima de este resultado es incorrecto, el resultado correcto es:
2
2
2
¿por qué es esto así?
que es debido a que en la función externa, relativa interior a la exterior es sólo una función de su definición interna del alcance de la variable i en el externo o medio, así
ahora no es el interior al cierre exterior, Por lo tanto, el cambio puede cambiar el valor de i es la variable interna dentro de i cuando se termina el último ciclo, el valor de la variable i es i 2 no cambiará el tiempo, y luego devuelve una lista del cierre, el impreso todos deberíamos 2

A continuación podemos ver un ejemplo, si ahora tengo una demanda, el contenido es que necesito tener una función, imprimí las actuales muchas veces a la llamada, si se entiende el iterador socio menor debe ser muy fácil de implementar cuando esta función se llama, pero no hay necesidad de aplicar esta función a modo de cierre, la forma de lograrlo.
puede haber un socio pequeño tendrá las siguientes ideas:
Aquí Insertar imagen Descripción
pero lamento decir que este enfoque es erróneo, es posible que desee ver los resultados:
Aquí Insertar imagen Descripción
análisis causa del error, probablemente significa que la variable local "CNT", en referencia a la asignación antes, se nos dice que no se puede asignar después de referencia debido a que el alcance de esta variable está en la función externa, entonces la forma de resolver este problema, entonces, Python proporciona una buena una palabra reservada utiliza para declarar variables locales (palabra clave no local)
nos fijamos en la aplicación de la revisión de los resultados:

Aquí Insertar imagen Descripción
Después de la declaración no local puede ser visto a través de la variable cnt obtener los resultados que queremos

Aquí hay alguna explicación del alcance de la variable del proceso oficial de cierre:
"" la célula "Los objetos son referenciados por las variables utilizadas para implementar el Para cada una de esas variables múltiples campos de acción, creado es un almacén de objetos a Cell El valor; cada una de las variables El local. marco de pila que hace referencia al valor contiene una referencia a las células de ámbitos exteriores que también utilizan esa variable. Cuando se accede al valor, el valor contenido en la célula se utiliza en lugar de la propia objeto de celda. Este de-referencia del objeto de celda el byte generada desde el apoyo del código requiere; estos son-de referencia cuando no se accede automáticamente a la célula ser objetos probable es que no están en otra parte útil ".
la célula "objetos referenciados por las variables utilizadas para implementar más de un ámbito". Para cada variable de este tipo, un objeto de celda para crear un valor almacenado; referencia un marco de pila variable local para cada valor comprende una referencia a la célula desde el exterior del alcance, también fuera del alcance de las variables utilizadas. Cuando se accede al valor, el valor contenido en la célula, la célula en lugar del objeto mismo. Cancelar objeto de celda de referencia de código de bytes necesidades de apoyo que se genere; estas referencias no se cancelan de forma automática en el momento de acceso. objeto de celda poco probable que sea en otra parte útil.
Así que todo el mundo debe entender.

En segundo lugar, ¿por qué tener el cierre

Cierre evita el uso de variables globales, además, el cierre y permite que algunos de los datos que opera en la función (medio ambiente) conectados entre sí. Esta programación orientada a objetos es muy similar, la superficie de la programación de objetos, los objetos que nos permite a algunos datos (propiedades del objeto) con uno o más asociados métodos.

En general, cuando el objeto es sólo una forma, a continuación, el uso de cierres es la mejor opción.
Aquí se utiliza dos métodos diferentes para lograr el mismo tipo de demanda, de esa manera se puede saber relativamente más ventajas:

Demanda: Tenemos un objeto digital llamado Número, que quiere lograr su funcionamiento, además de la ley

  1. Para lograr por categoría:
    Aquí Insertar imagen Descripción
  2. Lograrse con cierres

Aquí Insertar imagen Descripción
Podemos ver que puede hacer que el código cuando cierres de manera de lograr una más sencilla, por lo que usted desea utilizar los cierres de razones.

Cierre la utilidad - decorador

Dado que hablar delante de tantos cierres de conocimiento y aplicaciones, entonces aquí es una mirada a la clausura de la mayor utilidad en Python, es decir, "decorador."
Al oír el nombre, se conoce el papel de decorador, decorador Bueno sin duda es utilizado para decorar bien, eso es lo que se utiliza para decorar, de hecho, que se utiliza para decorar algunos de los objetos en el pitón.
pueden ser socios pequeños antes de decorador de la comprensión, cuando se expone a la clase para ver que hay existen métodos de clase por encima de algunos símbolos especiales.
como Aquí Insertar imagen Descripción
palabras clave como modificado por el símbolo @ es en realidad un decorador.
por lo que vamos a definir una simple mirada decorador:
Aquí Insertar imagen Descripción
lo anterior es nuestra costumbre decorador un decorador, en el siguiente definimos la función f que los usamos para decorar decorador,
sólo encontramos dentro de la función original f ">>>> ser ejecutado" información de impresión de línea, pero después de un decorador, se imprimir información en una de dos líneas,
¿no es increíble, todo por una razón, secreto ahora para mirar dentro de este misterio.
de hecho, el papel del símbolo @ aquí es dejar que el programa realiza automáticamente una Tipo de declaración "f = decorador (f)" Queremos ver a saber: Aquí Insertar imagen Descripción
Hey, nos encontramos con que se define la función f su nombre fue cambiado a la envoltura, no es eso lo que devuelve las decorador cierres Bueno, por lo combinado con cierres anteriores conocimientos, se encontró que el decorador en realidad no es algo tan difícil.

Bueno, vamos a ver algunos de los decorador más sofisticado profundizar en la comprensión:

  1. Con decorador de referencia:
    Aquí Insertar imagen Descripción
    cuando logramos los argumentos anteriores enviado al decorador en la práctica, nos dimos un nombre para la función actual, y luego en la implementación de imprimirlo, se encontró que la participación a ser masivo, todo nuestro la función anidada se convierte en tres, y por supuesto, la parte frontal de trabajo mecanismo decorador sin parámetros son similares, un nombre nuevo. decorador con parámetros fuera nada más que f = nombre_conjunto operaciones siguientes durante el uso de ( "Nick") (f) por lo que debe entender.
  2. función decoradora con los parámetros a ser decorado preguntas:
    (1) El primer enfoque: Aquí Insertar imagen Descripción
    Obviamente, este enfoque se hace fuera de la versatilidad decorativa no es fuerte, si necesitamos para decorar un parámetro de función cambios que se producen en nuestro decorador no se puede utilizar, y esto es ciertamente inaceptable para nosotros.
    (1) el segundo enfoque:
    Aquí Insertar imagen Descripción
    y el mismo efecto que el método anterior, pero utilizando parámetros de parcela y los parámetros de paquetes de palabras clave de la participación masiva, fuerte versatilidad en el lote, se recomienda escribir.

Estamos hablando de la primera vez de decorador encontramos un problema, y eso es un decorador función modificada después del cambio original nombre de la función tuvo lugar, tenemos un nombre unificado convirtió en el nombre de la función definida por nuestro decorador interior, Si todavía quiero el nombre de la función original de cómo hacerlo, no se preocupe hay primera aproximación la siguiente:
Aquí Insertar imagen Descripción
para hacerlo realmente está obligado a cambiar el nombre de su tema, este enfoque ciertamente no es tan elegante, y también en Python no se respetan
nosotros un aspecto más elegante en la siguiente redacción:
Aquí Insertar imagen Descripción
esta vez a la derecha, al igual que papá dijo que tenemos que utilizar magia contra magia, aquí decoradores decoradores para resolver el problema, es más elegante muchos, y
si los pequeños socios interesados pueden desear pensar en sus propios pensamiento functools.wraps lograr este decorador, y luego aplicar a sí mismo una vez, creo que aprender decoradores tienen un poco de ayuda aquí entre razones de espacio no explican la realización la idea.

  1. Utilice la secuencia de ejecución de múltiples decorador
    momentos en que necesitamos más de una función decoradores extendidos, ¿cómo podemos escribir, cuando una jerarquía de llamadas función decorativa con múltiples decoradores orden entre el decorador y cómo , lea el siguiente ejemplo, usted sabrá:
    Aquí Insertar imagen Descripción
    podemos ver cuando necesitamos más de decorador de decorar, decorador sólo tiene que girar a la superposición, el orden de decorador de ejecución se realiza secuencialmente desde arriba, es por eso, que puede contribuir, junto declarado antes del símbolo @ en realidad hacer las cosas en términos de (f = decorador (f))
    , esto se anida entre varios decoradores de la relación entre el esquema jerárquico de abajo hacia arriba la relación es:
 f = decorator3(decorator2(decorator1(f)))
  1. último ejemplo Vamos, utilizamos la forma de clase para lograr un aspecto decorador:
    Aquí Insertar imagen Descripción
    para la clase _ Call _ métodos ya se han mencionado aquí no se habla, llamando el proceso aquí, delante de la primera y decoradores adorno está llamando procedimiento es el mismo que f = MyDecorator (f) correspondiente a un objeto f es una clase de instancia por el MyDecorator a cabo, cuando el objeto en la ejecución f f () se activa en un MyDecorator método __call__ .

Así cierres y decoradores explicación llegó a su fin, el socio menor en duda bienvenidos a hacer preguntas, discutir los aspectos del conocimiento de Python juntos.

Publicado 27 artículos originales · ganado elogios 62 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_42359956/article/details/104729796
Recomendado
Clasificación