O que são geradores em Python e como usá-los?



Aprenda o que são geradores em Python e as vantagens. Aprenda também como criá-los e usá-los junto com vários casos de uso.

A geração de iteráveis ​​ou objetos que permitem passar por cima deles é considerada uma tarefa trabalhosa. Mas em , a implementação dessa tarefa dolorosa fica muito tranquila. Então, vamos dar uma olhada mais de perto nos Geradores em Python.

Aqui está uma lista de todos os tópicos abordados neste artigo:





Então, vamos começar. :)

O que são geradores em Python?

Os geradores são basicamente funções que retornam objetos ou itens percorríveis. Essas funções não produzem todos os itens de uma vez, em vez disso, eles os produzem um por vez e somente quando necessário. Sempre que está incluído para iterar sobre um conjunto de itens, uma função de gerador é executada. Os geradores também apresentam várias vantagens.



alocação de memória dinâmica em c ++ com programa de exemplo

Vantagens de usar geradores

  • Sem Geradores em Python, produzir iteráveis ​​é extremamente difícil e demorado.

  • Geradores fáceis de implementar, pois implementam automaticamente __iter __ (), __next __ () e StopIteration que, caso contrário, precisam ser explicitamente especificados.



  • A memória é salva conforme os itens são produzidos conforme necessário, ao contrário do normal . Esse fato se torna muito importante quando você precisa criar um grande número de iteradores. Esta também é considerada a maior vantagem dos geradores.

  • Pode ser usado para produzir um número infinito de itens.

  • Eles também podem ser usados ​​para canalizar uma série de operações

Funções normais versus funções do gerador:

Geradores em Python são criados exatamente como você cria usando a palavra-chave ‘def’. Porém, as funções do Generator usam a palavra-chave yield em vez de return. Isso é feito para notificar o interpretador de que este é um iterador. Não apenas isso, as funções do gerador são executadas quando a função next () é chamada e não por seu nome, como no caso das funções normais. Considere o seguinte exemplo para entendê-lo melhor:

EXEMPLO:

def func (a): produz a a = [1,2,3] b = func (a) next (b)

RESULTADO: [1, 2, 3]

Como você pode ver, na saída acima, func () está usando a palavra-chave yield e a próxima função para sua execução. Mas, para o funcionamento normal, você precisará do seguinte código:

EXEMPLO:

def func (a): retorna a a = [1,2,3] func (a)

RESULTADO: [1, 2, 3]

Se você observar o exemplo acima, pode estar se perguntando por que usar uma função Gerador quando a função normal também está retornando a mesma saída. Então, vamos seguir em frente e ver como usar Geradores em Python.

Usando funções do gerador:

Como mencionado anteriormente, os Geradores em Python produzem iteráveis ​​um de cada vez. Dê uma olhada no seguinte exemplo:

EXEMPLO:

def myfunc (a): enquanto a> = 3: produz a a = a + 1 b = myfunc (a) print (b) next (b)

Ao executar a função a seguir, você verá a seguinte saída:

RESULTADO: 4

Aqui, um objeto iterável foi retornado satisfazendo a condição while. Após a execução, o controle é transferido para o chamador. Caso mais itens sejam necessários, a mesma função precisa ser executada novamente chamando a função next ().

próximo (b)

RESULTADO: 5

Em outras execuções, a função retornará 6,7, etc. As funções do gerador em Python implementam os métodos __iter __ () e __next __ () automaticamente. Portanto, você pode iterar sobre os objetos usando apenas o método next (). Quando a geração do item deve terminar, as funções do Gerador implementam o StopIteration internamente sem ter que preocupar o chamador. Aqui está outro exemplo disso:

EXEMPLO:

a = 2 def myfunc (a): enquanto a> = 0: produz a a - = 1 b = myfunc (a) print (b) next (b)

RESULTADO:

StopIteration-Generators em Python-EdurekaA imagem acima mostra o número de vezes necessário de execução de nosso programa. Se você tentar chamar a próxima função novamente, ela retornará uma mensagem mostrando StopIteration foi implementado. Se você tentar fazer isso com funções normais, os valores retornados não serão alterados ou iterados. Dê uma olhada no exemplo abaixo:

EXEMPLO:

def z (): n = 1 rendimento n n = n + 3 rendimento n p = z () próximo (p)

RESULTADO:

Geradores com loops:

Caso queira executar a mesma função de uma vez, você pode usar o loop ‘for’. Este loop ajuda a iterar sobre os objetos e, após todas as implementações, executa StopIteration.

EXEMPLO:

def z (): n = 1 rendimento n n = n + 3 rendimento n para x em z (): imprimir (x)

RESULTADO:

1
4

Você também pode especificar expressões para gerar objetos iteráveis.

Expressões do gerador:

Você também pode usar expressões junto com o loop for para produzir iteradores. Isso geralmente torna os iteráveis ​​de geração muito mais fáceis. Expressão geradora assemelha-se a compreensões de lista e como funções lambda , expressões geradoras criam funções geradoras anônimas.

Dê uma olhada no exemplo abaixo:

EXEMPLO:

a = range (6) print ('List Comprehension', end = ':') b = [x + 2 para x em a] print (b) print ('Expressão geradora', end = ': n') c = (x + 2 para x em a) print (c) para y em c: print (y)

RESULTADO:

Compreensão da lista: [2, 3, 4, 5, 6, 7]

Expressão geradora:

2
3
4
5
6

Como você pode ver, na saída acima, a primeira expressão é uma compreensão de lista que é especificada entre colchetes []. A compreensão da lista produz a lista completa de itens de uma vez. A próxima é uma expressão geradora que retorna os mesmos itens, mas um de cada vez. É especificado usando colchetes ().


Geradoras funções também podem ser usadas dentro de outras funções.Por exemplo:

EXEMPLO:

a = intervalo (6) print ('Expressão geradora', end = ': n') c = (x + 2 para x em a) print (c) print (min (c))

RESULTADO:

Expressão geradora
2

O programa acima imprime o valor mínimo quando a expressão acima é aplicada aos valores de a.

Casos de uso:

Vamos usar geradores em para:

  • Gerar Série Fibonacci
  • Gerando Números

Gerando Série Fibonacci:

A série de Fibonacci, como todos sabemos, é uma série de números em que cada número é a soma dos dois números anteriores. Os primeiros dois números são 0 e 1. Aqui está um programa gerador para gerar séries de Fibonacci:

EXEMPLO:

def fibo (): primeiro, segundo = 0,1 enquanto Verdadeiro: produz primeiro primeiro, segundo = segundo, primeiro + segundo para x em fibo (): se x> 50: quebra de impressão (x, fim = '')

RESULTADO:

0 1 1 2 3 5 8 13 21 34

A saída acima mostra a série de Fibonacci com valores menores que 50. Vamos agora dar uma olhada em como gerar uma lista de números.

Gerando Números:

Caso deseje gerar números de lista especificados, você pode fazê-lo usando funções geradoras. Dê uma olhada no seguinte exemplo:

EXEMPLO:

a = intervalo (10) b = (x para x em a) print (b) para y em b: print (y)

RESULTADO:

0
1
2
3
4
5
6
7
8
9

EXEMPLO:

o que tostring faz em java
a = intervalo (2,10,2) b = (x para x em a) print (b) para y em b: print (y)

RESULTADO:


2
4
6
8

O programa acima retornou números pares de 2 a 10. Isso nos leva ao final deste artigo sobre Geradores em Python. Espero que você tenha entendido todos os tópicos.

Pratique o máximo possível e reverta sua experiência.

Tem alguma questão para nós? Mencione isso na seção de comentários deste blog “Geradores em Python” e entraremos em contato com você o mais breve possível.

Para obter conhecimento aprofundado sobre Python e seus vários aplicativos, você pode se inscrever para com suporte 24/7 e acesso vitalício.