Generador de pitón

Generador de pitón
En este tema, aprenderemos el generador de Python.

Definición: Un generador es como una función normal que genera un rango de valores utilizando el producir palabra clave. Devuelve un objeto a la vez. Usa internamente un iterador. Para acceder al siguiente elemento próximo() se usa la función, o podemos usarla para un bucle. Si intentamos acceder al valor fuera del rango, plantea un Stopiteración error.

Veremos algún ejemplo para entender mejor

Ex: Función del generador para el rango de valores

def range_fun (n):
x = 0
Mientras que x < n:
rendimiento x
x += 1
y = range_fun (3)
#call usando para bucle
imprimir ('Generar valores usando el método Next ())
para i en range_fun (3):
Imprimir (i)
#call generador usando el siguiente método
imprimir ('Generar valores usando para el método de bucle')
Imprimir (Siguiente (y))
Imprimir (Siguiente (y))
Imprimir (Siguiente (y))
imprimir (siguiente (y))#Se planteará la excepción de iteración de parada

Ex: Función de generador para la serie Fibonacci

def fib_fun (n):
x, y = 0, 1
Mientras que x < n:
rendimiento x
x, y = y, x + y
z = fib_fun (6) #Generator Object
imprimir ('Generar valores usando el método Next ())
Imprimir (Siguiente (Z))
Imprimir (Siguiente (Z))
Imprimir (Siguiente (Z))
Imprimir (Siguiente (Z))
Imprimir (Siguiente (Z))
Imprimir (Siguiente (Z))
imprimir ('Generar valores usando para el método de bucle')
para i en fib_fun (6):
Imprimir (i)

Ex: Función del generador para crear un rango de valores dados de valores de inicio y finalización.

def my_range (inicio, final):
actual = inicio
Mientras que actual < end:
rendimiento de corriente
corriente += 1
imprimir ('Generar valores usando el método Next ())
nums = my_range (1,5)
Imprimir (Siguiente (NUMS))
Imprimir (Siguiente (NUMS))
Imprimir (Siguiente (NUMS))
Imprimir (Siguiente (NUMS))
imprimir ('Generar valores usando para el método de bucle')
para num en my_range (1,5):
Imprimir (NUM)

Ex: Generador para multiplicar cada número (menos de un número) por un número

def gen_mulby_num (max, num):
n = 0
Mientras que n < max:
rendimiento n * num
n += 1
para i en gen_mulby_num (5,3):
Imprimir (i)

Ex: Generador para encontrar cubo para un rango de valores

def gen_mulby_num (max, num):
n = 0
Mientras que n < max:
rendimiento n * num
n += 1
para i en gen_mulby_num (5,3):
Imprimir (i)

Ex: Generadores múltiples: encuentre el cuadrado de los números uniformes generados a partir de un número

Generador 1: Genere valores pares a partir de un número dado

Generador 2: generar números cuadrados a partir de valores de generador1

def gen_even (m):
n = 0
Mientras que n < m:
Si n % 2 == 0:
rendimiento n
n += 2
def gen_square (nums):
Para NUM en NUMS:
rendimiento 2 * NUM
para n en gen_square (gen_even (15)):
Imprimir (n)


Ex: Generadores múltiples: cree la serie Fibnacci y agregue el valor 10 cada número.

Generador1: genera series Fibonacci a partir de un número dado

Generador2: Agregue cada número por 10 desde Generator1

def gen_fib (n):
x, y = 0, 1
Mientras que x < n:
rendimiento x
x, y = y, x + y
def gen_add_10 (nums):
Para NUM en NUMS:
rendimiento 10 + num
para n en gen_add_10 (gen_fib (5)):
Imprimir (n)


Comprensiones del generador:

Las comprensiones del generador son similares a las comprensiones de la lista donde la lista usa soportes cuadrados; Esto usa paréntesis normal.

Ex:

nums = (i para i en el rango (10))
Imprimir (tipo (NUMS))
Imprimir (Lista (NUMS))

Diferencia entre el generador y la función normal:

  1. Un generador proporciona valores utilizando producir palabra clave donde la función normal usa el devolver palabra clave
  2. El generador comienza desde donde se detuvo cuando se le llamó la próxima vez. La función normal ejecuta todas las declaraciones cada vez.
  3. El generador guarda la memoria, ya que devuelve un valor a la vez. Para que podamos usarlo para generar valores infinitos.

Conclusión:

El generador es muy útil cuando manejamos datos enormes/grandes. En un momento dado, solo contiene un solo datos en lugar de datos completos. El concepto de generadores se considera un concepto avanzado en Python.