Python notas de estudio: Generador (generador) Detailed


En primer lugar, una lista de fórmula: generar dinámicamente la lista, en lugar de asignar un valor fijo a la lista, para que el programa será más flexible
DEF de prueba (I):
     # que es aún 
    IF I% 2 == 0:
         retorno I 

# fórmula común 
lista1 = [I 2 * para I en Rango (10 )]
 de impresión (Lista1)
 # seleccionando el valor de una función 
lista1 = [Test (I) para los que en la gama (10 )]
 de impresión (Lista1)

En segundo lugar, el Constructor: lista antes de llamar dispuesto, si la cantidad de datos que esta lista es enorme, entonces se ha ocupado de la memoria y las ineficiencias,
tales como una lista de 1 millón de elementos, este ciclo sólo se distribuyó a la parte delantera del 100, este último elemento no se utiliza, ¿hay una
manera usted puede generar los elementos cuando se dice? Este es el generador.

# (I * 2 para i in range (10000)) devuelve un generador de direcciones de memoria 
list3 = (I * 2 para que en el rango (10000))
Nota: El generador no se puede utilizar "lista [0]" De esta manera, las llamadas dentro del elemento, ya que el elemento no se ha generado, puede ser utilizado para acceder al bucle for
# Puede ser el método __next () para obtener el siguiente __, para obtener un elemento próximo al mismo tiempo delante de un desaparecido, por lo que el elemento generador de sólo registra la posición actual. No se puede ir hacia atrás, hacia adelante con el __next __ () 
Imprimir (list3. __Next__ ())
 Imprimir (list3. __Next__ ())
 Imprimir (list3. __Next__ ())
# Por lo general se utiliza para ciclo de acceso, no será usada __next __ () Método 
# esto es utilizar la incorporada en el iterador pitón, que construyó el próximo método 
para i en list3
   impresión (i)
Por ejemplo, la columna con el generador de Fibonacci para generar, (números de Fibonacci definición de columna: Además de la primera y el segundo número, el segundo número se obtiene sumando los dos primeros números similares) 
por debajo de longhand
list_num = (i para i en rango (10 )) 
list_new_num = [] 

para i en list_num:
     si i = 0! y i = 1! : 
        list_new_num.append (list_new_num [i - 1] + list_new_num [i - 2 ])
     otra cosa : 
        list_new_num.append (i) 
    de impresión (list_new_num [i])
Otra formulación de Fibonacci del número de
n-, A, B = 0, 0 ,. 1   # asignación continua 
el mientras n- <10 :
     Imprimir (B) 
    A, B = B, A + B 
    n- . = n- + 1
El código anterior cambiarlo. 
Interrupción palabra clave yield estado de función de ahorro, el código puede ser ejecutado primera llamada al exterior, no es necesario esperar hasta que todos los valores son recalculados ejecución, lo que puede mejorar en gran medida la eficiencia de
la ejecución a la siguiente () cuando la posición de la espalda rendimiento de la función continúe código interno.
DEF FIB (max): 
    n-, A, b = 0, 0 ,. 1 el mientras n- < max:
         rendimiento b   # más el rendimiento se convierte en un generador, corresponde el valor almacenado en la variable b aquí. B Esto es para extenderse, de manera que un rendimiento etiquetada 
        A, b = b, A + b 
        n- =. 1 + n-
     retorno " equivocado " # Este es un mensaje de error, será capturado excepción. # Devuelve un generador, por lo fib correspondiente a la aplicación concreta de este generador. 
fib = G (6. ) al mismo tiempo verdadero:
     el try :
         # La siguiente es una incorporada en el método, con el papel de la __next () __ como el siguiente elemento tomada generador # después de entrar en el siguiente rendimiento por encima de fib función de la posición 
        X = próximo (G)
         Imprimir ( "

       




        G: "X)
     la excepción de la StopIteration como E:   # aquí para finalizar el programa de captura de excepciones de impresión ( " error: " , e.Value)
         DESCANSO
        
rendimiento también se puede utilizar para hacer llamadas corrutina bajo un solo hilo, aunque todavía solo-roscados (roscas y corrutinas solamente se describirán más adelante), pero por el rendimiento puede mejorar en gran medida la eficiencia 
de los siguientes es un modelo típico de la producción y el consumo, la producción de una persona varios consumo humano, pero al mismo tiempo, el uso del rendimiento de la propiedad, lo que llamamos "paralelo Constructor"
Importación Tiempo
 DEF Consumidor (nombre):
     Imprimir ( " !% S preparó un bollo " % nombre)
     al mismo tiempo verdadera: 
        Baozi = rendimiento  # dió ningún valor de retorno, ¿por qué se asigna a Baozhi ella? 

        Imprimir ( " bollo [% s] viene, el [% s] comió. " % (Baozi, nombre)) 

# C = Consumo ( "Tangwei") 
# C .__ Siguiente __ () # __next__ primera ejecución la posición del consumidor en la función del rendimiento, y luego regresa 
# C .__ Siguiente __ () segunda porción # __next__ continúa con el resto del bucle continúa hasta que el salto se lleva a cabo para producir 

# C .__ Siguiente __ () # primera _ _next__ lleva a cabo para producir la posición del consumidor en la función, y luego regresa 
#c.send ( "carne") # envían el valor se pasa a una posición dentro de la función de rendimiento de los consumidores, que se asigna a la variable baozi luego siguiente, invocación solamente __next__ no pasa un valor para producir 

DEF Productor (nombre):
     # genera un generador de 
    C1 = consumidor ( " Tangwei " )
     # genera un generador de 
    C2 = consumidor ( " chenyadan " )
     # C1 prepara bollo, __ next__ consumidor ubicación para realizar la función del rendimiento, y luego regresar a 
    c1. __next__ ()
     # C2 anterior 
    c2. __next__ ()
     Imprimir ( " soy un chef [% s], comenzó a hacer bollos ... " % (nombre))
     para i en el rango (10): 
        El time.sleep ( . 1 )
         Imprimir ( " hacer un moño, la mitad .. " ) 
        c1.send (I) # enviar un valor de rendimiento se pasa a una función de la posición dentro del consumidor, que se asigna a la variable Baozi, llamar no sólo el valor __next__ para rendir pasado 
        c2.send (i) 

# Aunque el programa sigue siendo el orden de ejecución, pero debido a que el flujo del programa puede saltar entre las funciones, no hay necesidad de esperar hasta después del final de una función y luego realizar otra función , mejorando así en gran medida la eficiencia de la aplicación. 
# Este es un efectos paralelos en corrutinas-individuales roscado, es decir,, co-rutina es menor que la unidad de hilo, parásitos en el hilo. 
Productor ( " perro ignorar " )

 

Supongo que te gusta

Origin www.cnblogs.com/tangwei-fuzhou/p/12669069.html
Recomendado
Clasificación