Definição: Um gerador é como uma função normal que gera uma gama de valores usando o produção palavra-chave. Ele retorna um objeto por vez. Ele usa internamente um iterador. Para acessar o próximo elemento Next() função é usada, ou podemos usá-la para uma volta. Se tentarmos acessar o valor fora do intervalo, ele aumentará um StopIteration erro.
Veremos alguns exemplos para entender melhor
Ex: função geradora para faixa de valores
def range_fun (n):x = 0
enquanto x < n:
rendimento x
x + = 1
y = intervalo_fun (3)
#call usando for loop
print ('Gerar valores usando o método next ()')
para i em range_fun (3):
imprimir (i)
#call generator usando o próximo método
print ('Gerar valores usando o método de loop')
imprimir (próximo (y))
imprimir (próximo (y))
imprimir (próximo (y))
print (next (y)) # Exceção de parada de iteração será gerada
Ex: Função geradora para a série Fibonacci
def fib_fun (n):x, y = 0, 1
enquanto x < n:
rendimento x
x, y = y, x + y
z = fib_fun (6) objeto #generator
print ('Gerar valores usando o método next ()')
imprimir (próximo (z))
imprimir (próximo (z))
imprimir (próximo (z))
imprimir (próximo (z))
imprimir (próximo (z))
imprimir (próximo (z))
print ('Gerar valores usando o método de loop')
para i em fib_fun (6):
imprimir (i)
Ex: Função geradora para criar faixa de valores, dados os valores inicial e final.
def my_range (início, fim):current = start
enquanto atual < end:
rendimento atual
atual + = 1
print ('Gerar valores usando o método next ()')
nums = my_range (1,5)
imprimir (próximo (nums))
imprimir (próximo (nums))
imprimir (próximo (nums))
imprimir (próximo (nums))
print ('Gerar valores usando o método de loop')
para num em my_range (1,5):
imprimir (num)
Ex: Gerador para multiplicar cada número (menos que um número) por um número
def gen_mulby_num (max, num):n = 0
enquanto n < max:
rendimento n * num
n + = 1
para i em gen_mulby_num (5,3):
imprimir (i)
Ex: Gerador para encontrar cubo para intervalo de valores
def gen_mulby_num (max, num):n = 0
enquanto n < max:
rendimento n * num
n + = 1
para i em gen_mulby_num (5,3):
imprimir (i)
Ex: múltiplos geradores: encontre o quadrado dos números pares gerados a partir de um número
Gerador 1: gerar valores pares a partir de um determinado número
Gerador 2: gerar números quadrados a partir dos valores do gerador1
def gen_even (m):n = 0
enquanto n < m:
se n% 2 == 0:
rendimento n
n + = 2
def gen_square (nums):
para num em nums:
rendimento 2 * num
para n em gen_square (gen_even (15)):
imprimir (n)
Ex: Múltiplos geradores: crie a série fibnacci e agregue valor 10 a cada número.
Generator1: gera séries de fibonacci a partir de um determinado número
Generator2: some cada número por 10 do generator1
def gen_fib (n):x, y = 0, 1
enquanto x < n:
rendimento x
x, y = y, x + y
def gen_add_10 (nums):
para num em nums:
rendimento 10 + num
para n em gen_add_10 (gen_fib (5)):
imprimir (n)
Compreensões do gerador:
As compreensões do gerador são semelhantes às compreensões de lista em que a lista usa colchetes; isto usa parênteses normais.
Ex:
nums = (i para i no intervalo (10))imprimir (tipo (nums))
imprimir (lista (nums))
Diferença entre gerador e função normal:
- Um gerador fornece valores usando produção palavra-chave onde a função normal usa o Retorna palavra-chave
- O gerador começa de onde parou na próxima vez. A função normal executa todas as instruções todas as vezes.
- O gerador economiza memória, pois retorna um valor de cada vez. Então, podemos usá-lo para gerar valores infinitos.
Conclusão:
O Generator é muito útil quando estamos lidando com dados enormes / grandes. Em um determinado momento, ele contém apenas uma única parte dos dados, em vez de dados inteiros. O conceito de geradores é considerado um conceito avançado em python.