Definición: Un generador es como una función normal que genera un rango de valores usando el producir palabra clave. Devuelve un objeto a la vez. Utiliza internamente un iterador. Para acceder al siguiente elemento Siguiente() se usa la función, o podemos usarla por un bucle. Si intentamos acceder al valor fuera del rango, genera un StopIteration error.
Veremos algún ejemplo para entender mejor
Ex: función de generador para rango de valores
def range_fun (n):x = 0
mientras x < n:
rendimiento x
x + = 1
y = range_fun (3)
# llamar usando el bucle for
print ('Generar valores usando el método next ()')
para yo en range_fun (3):
imprimir (i)
#generador de llamadas usando el método siguiente
print ('Generar valores usando el método de bucle for')
imprimir (siguiente (y))
imprimir (siguiente (y))
imprimir (siguiente (y))
print (next (y)) # Se generará la excepción Stop Iteration
Ex: Función de generador para la serie Fibonacci
def fib_fun (n):x, y = 0, 1
mientras x < n:
rendimiento x
x, y = y, x + y
z = fib_fun (6) #objeto generador
print ('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))
print ('Generar valores usando el método de bucle for')
para yo en fib_fun (6):
imprimir (i)
Ex: Función de generador para crear un rango de valores dados los valores iniciales y finales.
def my_range (inicio, final):actual = inicio
mientras actual < end:
corriente de rendimiento
corriente + = 1
print ('Generar valores usando el método next ()')
nums = my_range (1,5)
imprimir (siguiente (números))
imprimir (siguiente (números))
imprimir (siguiente (números))
imprimir (siguiente (números))
print ('Generar valores usando el método de bucle for')
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 yo en gen_mulby_num (5,3):
imprimir (i)
Ex: Generador para encontrar el cubo para el rango de valores
def gen_mulby_num (max, num):n = 0
mientras que n < max:
rendimiento n * num
n + = 1
para yo en gen_mulby_num (5,3):
imprimir (i)
Ex: generadores múltiples: encuentra el cuadrado de números pares generados a partir de un número
Generador 1: genera valores pares a partir de un número dado
Generador 2: genera números cuadrados a partir de los valores del generador1
def gen_even (m):n = 0
mientras que n < m:
si n% 2 == 0:
rendimiento n
n + = 2
def gen_square (números):
para num in nums:
rendimiento 2 * num
para n en gen_square (gen_even (15)):
imprimir (n)
Ex: Generadores múltiples: cree series de fibnacci y agregue valor 10 por cada número.
Generator1: genera series de fibonacci a partir de un número dado
Generador2: sume cada número por 10 del generador1
def gen_fib (n):x, y = 0, 1
mientras x < n:
rendimiento x
x, y = y, x + y
def gen_add_10 (números):
para num in 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 listas donde la lista usa corchetes; esto usa paréntesis normal.
Ex:
nums = (i para i en el rango (10))imprimir (tipo (números))
imprimir (lista (números))
Diferencia entre generador y funcionamiento normal:
- Un generador proporciona valores usando producir palabra clave donde la función normal usa la regreso palabra clave
- El generador comienza desde donde se detuvo cuando se lo llamó la próxima vez. La función normal ejecuta todas las declaraciones cada vez.
- El generador ahorra memoria ya que devuelve un valor a la vez. Entonces podemos usarlo para generar valores infinitos.
Conclusión:
Generator es muy útil cuando manejamos datos grandes / grandes. En un momento dado, contiene solo una pieza de datos en lugar de datos completos. El concepto de generadores se considera un concepto avanzado en Python.