Ok, não consigo ver você, mas sei o que você está sentindo, você está duvidando de mim agora, está pensando
que os geradores são inúteis.
Você fica dizendo que eles são rápidos e eficientes, mas eu realmente não entendo.
Este teclado LTH e este próximo.
E, honestamente, simplesmente não faz sentido.
Deixe-me convencê-lo de seu verdadeiro poder.
Vou selecionar tudo isso e apenas excluí-los, porque quero voltar a um exemplo que
usamos antes.
Lembra quando criamos a performance do decorador?
Na seção de nossa decoradora.
Usando este decorador de desempenho, vamos minimizá-lo, eu preciso.
Funções para nós, uma função de longa data que usa um intervalo.
E outra função antiga que usa um intervalo e depois o converte em uma lista.
Então, lembre-se, cria-se uma lista e, a partir dessa lista que criou uma memória em nossos computadores, ela vai uma a
uma e multiplica as coisas por cinco contra um intervalo, que é um gerador que vem embutido
em Python que vai apenas um por um, mantenha zero e memória e multiplique por cinco.
Mantenha um na memória, mas multiplique por cinco e continua, continua, continua e remove da
memória quaisquer números antigos.
Qual você acha que será o desempenho de ambos?
Vamos testar.
E, a propósito, vou acessar o exercício para que você possa testá-lo e experimentar.
Então, vamos fazer um bom tempo.
E então muito tempo para.
Faça suas apostas, prepare-se.
Vamos descobrir.
O tempo da primeira função demorou um vírgula seis segundos.
E então a segunda função demorou quase o dobro do tempo.
Essa é uma grande diferença, certo?
Mas imediatamente, podemos dizer.
Tudo bem, isso definitivamente tem mais desempenho do que, bem, muito tempo para executá-lo novamente apenas para testar nossas suposições,
ter certeza de que está correto.
Desta vez, demorou um vírgula oito e depois dois vírgula seis.
Tudo bem.
Isso é muito mais rápido, embora os dois façam a mesma coisa.
E pense nisso.
Se você fosse o Google, pense em quantos dados o Google tem se você está trabalhando no Google e imagine
se isso fosse ainda maior, se fosse ainda mais longo, se você pudesse realizar uma tarefa muito mais rápida.
Use muito menos recursos do que o Google.
Quer dizer, eles adorariam você porque com os geradores não é possível manter as coisas na memória, não
ter que consumir todos os recursos e, em vez disso, processar os dados com eficiência.
E olhe aqui.
Consegui resolver essa função em 16 segundos.
Quer dizer, sim, demorou muito, mas muito tempo para realmente conseguir.
Isso matou o processo.
Se fosse um servidor Google, é um servidor que acabou de morrer e é completamente inútil.
Portanto, os geradores são muito, muito úteis ao calcular grandes conjuntos de dados, especialmente se estivermos usando longos
loops onde não queremos armazenar essa memória e não precisamos calcular tudo ao mesmo tempo, talvez
um por 1.
E muitas bibliotecas em Python, por baixo do capô, usam geradores em vez de listas, porque são muito
mais rápidas.
Portanto, lembre-se de criar um gerador.
Tudo o que precisamos fazer é criar uma função geradora que desejamos.
E aqui, podemos simplesmente fazer um loop sobre algum valor.
Que talvez o atribuamos a um intervalo ou podemos apenas aceitar como parâmetro e tudo o que precisamos
fazer é simplesmente produzir esse resultado.
E faça o que quisermos neste bloco, mas certifique-se de pausar a função para que mais tarde ela possa ser
usada.
Como uma função geradora, podemos fazer algo como um loop for e dizer item na função gen e dar a ela algum
tipo de parâmetro.