Y pitón copia de cierre y matices con la recolección de basura y declaraciones

1.1 Los cierres

  1, el concepto de cierre

      1. Definir una función fuera de una función interna, la función en el uso de variables temporales fuera de la función y el valor de retorno está fuera de este modo la función de referencia constituye un cierre

      2. En circunstancias normales, los reconocemos, si una función ha terminado, todo va a ser relevado de las funciones internas, devueltos a la memoria, las variables locales desaparecerán.

      3. Sin embargo, el cierre es un caso especial, si la función externa se encuentra al final de sus variables temporales dentro de la función será utilizado en el futuro, poner la variable temporal está ligada a una función interna, y luego terminó su propia nuevo.

   2, características de cierre    

      1. Debe haber una función en línea

      2. La función incrustado debe hacer referencia a una variable externa en la función de

      3. Los valores de retorno de función externos deben ser incorporados en las funciones

# Instancia de función Cierre 
DEF exterior (A): 
    B = 10
     DEF interior ():           # función interna utiliza variables temporales fuera de la función 
        de impresión (A + B)         # devuelve un valor fuera de la función de referencia es una función de la 
    rentabilidad interior 

SI  el __name__ == ' __main__ ' : 
    demo = exterior (5 ) 
    demo ()     # 15 

# aquí llamamos funciones externas pasan parámetros 5 
# en este momento las dos funciones externas es una variable temporal B es 5 10, y crear una dentro de una función, la función devuelve una referencia dentro del depósito a la demostración 
# cuando se encuentran fuera de una función de la final de la función utilizará sus propias variables temporales internas, estas dos variables no serán liberación temporal, estaremos obligados a la función interna 
# llamamos a la función interna, echar un vistazo a variable temporal dentro de la función no es capaz de utilizar las funciones externas 
# DEMO almacenado fuera de los valores de retorno de función, es decir, la función interna de referencia, donde la función que corresponden a la aplicación de interior
Ejemplos de cierre

  3, las variables locales de cierre función de modificación de función externa 

    1, en el que la sintaxis básica de pitón, una función se puede leer sin datos globales, pero para modificar datos globales cuando hay dos métodos:
        1) Global declaraciones globales variables
        2) la variable global es un tipo de variable de datos puede ser modificada cuando
    2 utilizando los dos métodos siguientes en el caso de modificación de cierre
        1) en python3 puede declarar una variable con la palabra clave no local, esta variable no es una variable que representa el espacio de variable local, uno necesita espacio de las variables mirando hacia arriba la variable.
        2) En python2, ninguna palabra clave no local, podemos cambiar las modificaciones de datos variables de cierre tipo de variables, tales como una lista.

# Ejemplo de modificación de la variable de cierre 
DEF exterior (A): 
    b = 10             # A cierre y b son variables 
    C = [A]            # donde las variables correspondientes al método modificado de cierre 2 
    DEF interior ():
         # Método A: no locales declaración palabra (a python3) 
        no local B 
        B + 1 =. # método 2: la variable de cierre modificado en un conjunto de datos variable de tipo tales como una lista (python2) 
        . C [0] + = 1 Imprimir (C [0])
         de impresión (B)
     de retorno interior          # fuera de la función devuelve una referencia a la función de la IF el __name__ == ' __main__ ' : 
    demostración . = exterior (5

        
        

  )
    Demo ()              # 6 11
Una función para modificar la función de cierre exterior de la variable local

1.2 Python en la copia

   1, un conocimiento previo de las variables y su almacenamiento --python

       Todas las variables 1. Python es un objeto, las variables de la tienda, utilizando una semántica de referencia, pero el valor de una variable de dirección de memoria donde la tienda, en lugar de la variable en sí sólo

       2. No importa cómo las estructuras de datos complejas, copia superficial sólo copiar capa.

       La comprensión de : dos públicas una mesa, siempre y cuando la mesa sin cambios, comida en la mesa ha cambiado es el sentimiento común de dos personas.

Str1 = >>> ' Hello ' 
>>> str2 = str1 

# 1, por lo que las variables de str1 y str2 se almacenan en la dirección de memoria 'hola', donde 
>>> lo anterior Identificación del mencionado (cadena1)
 22748280 
>>> lo anterior Identificación del mencionado (cadena1)
 22748280 
>> > # 2, cuando el valor se convierte en el valor de cadena1 cadena1 la 'nueva hola' para ser reasignados 'nuevo hola' dirección de memoria, el valor sigue siendo str2 'hola' dirección de memoria 
>>> str1 = " nueva nueva Hola ' 
>>> ID (cadena1)
 22748320 
>>> ID (str2)
 22748280 # . 3, no importa cómo las estructuras de datos complejas, copia superficial será sólo una copia. 
SourceList = >>> [1,2, [3,4 ]]
 >>> newList = Listaorigen >>>






1, 2, [100, 4 ]]
 >>> newList 
[ 1, 2, [100, 4]]
No importa qué tan compleja estructuras de datos, copia superficial sólo copiar uno

   2, con un deepcopy copia superficial

      1, una copia superficial : no importa cuán compleja estructuras de datos, copia superficial sólo copiar uno

      2, un DeepCopy  : copia profunda copia completamente original de todas las variables relevantes de datos para generar un conjunto de exactamente el mismo contenido en la memoria, tenemos estas dos variables en cualquiera de las modificaciones no afectarán a otras variables

importación copia 
Listaorigen = [1,2,3, [4,5,6 ]] 
CopyList = copy.copy (Listaorigen) 
deepcopyList = copy.deepcopy (Listaorigen) 

Listaorigen [ 3] [0] = 100 de impresión (Listaorigen)            # [ 1, 2, 3, [100, 5, 6]] de impresión (CopyList)              # [1, 2, 3, [100, 5, 6]] de impresión (deepcopyList)          # [1, 2, 3, [4, 5 , 6]]



copia superficial y deepcopy

1.3 recolección de basura Python 

    La recolección de basura: https://www.cnblogs.com/TM0831/p/10599716.html

  1, el contador de referencias

    1. Principio

        1) Cuando se crea o objeto copiado una referencia, el recuento de referencia de objeto más 1; cuando un objeto de referencia se destruye, el recuento de referencia del objeto disminuyeron por uno.
        2) cuando el contador de referencia del objeto se reduce a cero, significa el objeto ya no se ha utilizado, puede ser liberado memoria.

    2. ventaja

        El recuento de referencia tiene una gran ventaja de que en tiempo real, cualquier memoria, una vez que no hay ninguna referencia a ella, se recuperará de inmediato, mientras que otros se niegan técnicas de recolección tienen que reivindicar la memoria no válida bajo ciertas condiciones especiales.

    3. inconveniente

        mecanismo 1) mantener el recuento de referencias trajo asignación referencia a la memoria y la liberación de operaciones adicionales cuentan y Python carrera lleva a cabo, misiones citas es directamente proporcional
        2), que está obviamente causado por esos otros que las técnicas de recogida de basura operativo adicional sólo con la cantidad de memoria que debe recuperarse en relación con menos eficiente.
        3) Al mismo tiempo, debido a las referencias mutuas entre los objetos, cada uno referencias a objetos no será cero, por lo que estos objetos siempre están ocupados por la memoria no se dará a conocer.

  2, Mark - Claro

    1. Descripción  

        1) Se divide en dos fases: la primera fase es un marcador, el GC se todos los objetos activos etiqueta marcados, la segunda etapa de esos objetos no marcados objetos inactivos se recuperó.

        2) entre los objetos conectados entre sí por referencia (puntero) para formar un grafo dirigido

        3) A partir de la salida objeto raíz (objeto raíz), existen marcadas a lo largo de los objetos transversal al lado, accesible (accesible) objetos para el objeto activo, objetos inactivos objeto inalcanzable es que se solucione.

              El objeto raíz es variables globales, la pila de llamadas, registros.

        Nota: como PyIntObject, PyStringObject objetos inmutables que no serían posibles referencia circular, porque no pueden mantener las referencias internas a otros objetos.

             

          1. En la figura, las variables del programa se puede acceder directamente desde el bloque 1, y se puede acceder indirectamente los bloques 2 y 3, no puede bloques de acceso 4 y 5
          2. El primer paso está marcando los bloques 1, 2 y 3 y recordar al bloque para su posterior procesamiento.
          Paso 3. El bloque marcador 2, bloque 3, el tercer paso va a marcar, pero no puede recordar el bloque 2, ya que se ha marcado.
          4. El bloque de fase de exploración 2 y 3 serán ignorados, porque han sido marcados, pero el bloque de recuperación 4 y 5.

    2, deficiencias

        1) bandera Clear como un algoritmo auxiliar de técnicas de recolección de basura Python, son algunos de los principales objetos de contenedor de procesamiento, como la lista, dict, tupla, etc.

             Debido a las cadenas, números, es probable que causen un problema de referencia circular objetos.

        2) pre-purga objeto inactivo debe escanear toda la secuencia de la memoria de pila, incluso si sólo una pequeña parte de los objetos activos también escanear todos los objetos.

   3, se recuperó generacional

      1. A partir de la generación de la técnica de recuperación se basa en la base de clara, un espacio de operación de marcado por el tiempo.

      2. Memoria de Python se divide en tres "generaciones", respectivamente, para la generación joven (generación 0), en el año (primera generación), el año de edad (segunda generación)

      3. Se corresponden con las tres listas, el objeto de aumentar la frecuencia de recogida de residuos disminución del tiempo de supervivencia de los mismos.

      4. Los objetos recién creados se asignan de la generación joven, el número total de la generación joven de la lista alcanza el límite superior, se activará Python mecanismo de recolección de basura

      5. Los objetos que se pueden reciclar de la recuperación, y esos objetos no son recuperados serán trasladados en años para ir, etc.

      6. La vieja era de los objetos es el tiempo de supervivencia más larga del objeto, o incluso sobrevivir en el ciclo de vida del sistema.

1.4 Contexto de Gestión (con)

  1. ¿Qué es la sentencia with

      1. con un protocolo de gestión de contexto objeto de la prueba diagrama de flujo, excepto las palabras clave y la asignación de recursos, y finalmente liberar todo el código correspondiente eliminado, oportunidad ... ... .except flujo de proceso simplificado .finlally.

      2.  Método Por lo tanto, con el uso de objeto de tratamiento debe entrar () y de salida () de los dos

        1) con entrar a través del método de inicialización (método de entrar en funcionamiento antes de que el ejecutor declaración)

        2) A continuación, hacerlo tan bien como consecuencia de las excepciones de la manija de salida (exit () se ejecuta método después el cuerpo de la declaración es la salida final)

  2, con los escenarios de uso declaración

      1. con la declaración para la ocasión acceso a los recursos, asegurando que, independientemente de si se produce una excepción en el curso de la ejecución de la operación necesaria "limpieza", la liberación de los recursos

      2. Por ejemplo, los archivos se apaga automáticamente, el seguro de rosca automáticamente adquieren y liberación.

  3, los ejemplos de las operaciones de archivo de procesamiento con

Abrir con ( ' / etc / passwd ' ) como F:
     para la línea de f:
         Imprimir (Línea)
   # acción de este código: abrir un archivo, si todo va bien, el objeto de expediente asignado a F, y luego atravesar el iterador archivo en cada fila, y cuando haya terminado, cierre el archivo; 

  # pero en cualquier lugar en este código, si se produce una excepción, el archivo estará cerrada.

 

 

Supongo que te gusta

Origin www.cnblogs.com/jiaxinzhu/p/12459825.html
Recomendado
Clasificación