Neste tópico, aprenderemos o gerador Python.
Definição: Um gerador é como uma função normal que gera uma gama de valores usando o colheita palavra -chave. Ele retorna um objeto de cada vez. Ele usa internamente um iterador. Para acessar o próximo elemento próximo() a função é usada, ou podemos usá -la para uma volta. Se tentarmos acessar o valor fora do intervalo, ele levanta um Stopiberation erro.
Veremos algum exemplo para entender melhor
Ex: Função do gerador para intervalo de valores
def range_fun (n):
x = 0
enquanto x < n:
rendimento x
x += 1
y = range_fun (3)
#Call usando o loop
print ('Gere valores usando o método next ()')
para i em range_fun (3):
impressão (i)
#Call Generator usando o próximo método
print ('Gere valores usando o método de loop')
Imprimir (próximo (y))
Imprimir (próximo (y))
Imprimir (próximo (y))
Imprimir (Next (y))#Stop iteração A exceção será levantada
Ex: Função do gerador 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) #Generator Object
print ('Gere 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 ('Gere valores usando o método de loop')
para i em fib_fun (6):
impressão (i)
Ex: Função do gerador para criar um intervalo de valores com valores iniciais e finais.
def my_range (start, fim):
atual = start
enquanto atual < end:
rendimento de corrente
corrente += 1
print ('Gere valores usando o método next ()')
NUMS = my_range (1,5)
Imprimir (Next (NUMS))
Imprimir (Next (NUMS))
Imprimir (Next (NUMS))
Imprimir (Next (NUMS))
print ('Gere valores usando o método de loop')
para num em my_range (1,5):
impressão (num)
Ex: Gerador para multiplicar cada número (menor que um número) por um número
def gen_mulby_num (max, num):
n = 0
enquanto n < max:
render n * num
n += 1
para i em gen_mulby_num (5,3):
impressão (i)
Ex: Gerador para encontrar cubo para intervalo de valores
def gen_mulby_num (max, num):
n = 0
enquanto n < max:
render n * num
n += 1
para i em gen_mulby_num (5,3):
impressão (i)
Ex: Vários geradores: encontre o quadrado de números pares gerados a partir de um número
Gerador 1: gerar valores uniformes de um determinado número
Gerador 2: Gere números quadrados a partir de 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)):
impressão (n)
Ex: Múltiplos geradores: Crie séries Fibnacci e adicione valor 10 cada número.
Gerador1: gera a série Fibonacci de um determinado número
Gerador2: adicione cada número por 10 do gerador1
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:
render 10 + num
para n em gen_add_10 (gen_fib (5)):
impressão (n)
Compreensões do gerador:
As compreensões do gerador são semelhantes às compreensões da lista em que a lista usa colchetes quadrados; Isso usa parêntese normal.
Ex:
nums = (i para i no intervalo (10))
Imprimir (tipo (NUMS))
IMPRIMENTO (LIST (NUMS))
Diferença entre gerador e função normal:
- Um gerador fornece valores usando colheita palavra -chave em que a função normal usa o retornar palavra -chave
- O gerador começa de onde parou quando chamado na próxima vez. A função normal executa todas as declarações todas as vezes.
- O gerador salva a memória à medida que retorna um valor por vez. Para que possamos usá -lo para gerar valores infinitos.
Conclusão:
O gerador é muito útil quando estamos lidando com dados enormes/grandes. Em um determinado momento, ele mantém apenas uma única parte de dados em vez de dados inteiros. O conceito de geradores é considerado um conceito avançado em Python.