Blog

Postado em em 25 de julho de 2023

Yield em Python – Como Funciona, Generators e Problemas de Memória

O que é Yield em Python? Quando você lida com arquivos muito grandes pode comprometer o espaço de memória, veja como resolver hoje!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala Impressionadores! Você já ouviu falar em Yield em Python? Nessa aula eu vou te explicar o que é Yield no Python e como usá-lo!

O Yield vai criar um generator no Python e é utilizado quando temos bases de dados muito grandes que acabam comprometendo a memória do computador na hora de ler essas informações.

A ideia é ter um processo eficiente em termos de memória para que você consiga ler sua base de dados de uma maneira mais tranquila sem exigir muito da memória.

Vou te explicar o que é um generator em Python, como funciona o Yield e como você vai utilizá-lo em um caso prático.

Gostou do tema? Então bora para a aula!

Você já ouviu falar do Yield em Python?

A função Yield pode fazer uma grande diferença no desempenho e eficiência do seu código, especialmente quando estamos lidando com grandes quantidades de informações.

Muita gente pode nunca ter visto o Yield, isso porque alguns programas implementam o yield dentro deles para trabalhar com grandes volumes de dados.

Assim, se você estiver analisando um arquivo muito grande não irá trava o seu computador por falta de espaço em memória. Esta função cria um gerador, uma espécie de objeto iterator no Python

O que isso significa na prática?

Vamos pensar um uma situação hipotética, imagine que você precise ler uma enorme base de dados de vendas da Amazon, com milhões ou bilhões de linhas.

Se você somente importar todas essas informações de uma vez para o Python vai acabar ocupando uma quantidade grande de memória, pode até ocorrer um erro de falta de memória.

Geralmente usamos o yield para bibliotecas do Python que lidam com grandes quantidades de dados, o yield vem implementando internamente, para facilitar o uso.

Tirando esses casos, às vezes precisamos criar nossas próprias funções, então é necessário utilizar o yield de forma consciente.

Vamos usar um exemplo em uma base de dados de apenas 6 linhas e criar um arquivo que vai ler o arquivo CSV para nós.

Se você tem dúvidas sobre como usar o With para ler arquivos vou deixar uma aula aqui que vai tirar suas dúvidas!

Def ler_csv(nome_arquivo):

        With open(nome_arquivo, “r”) as arquivo:

Agora, ao invés de abrir o arquivo todo e ler de uma única vez vamos usar o Yield para ler linha por linha do arquivo sem trazer todas as informações de uma vez.

Então ao invés de ter como resposta uma lista com todas as informações do arquivo o Yield vai retornar para nós um objeto (Generators) que não ocupa um espaço grande e memória.

Se você fizer um FOR com esse resultado (geralmente se usa o FOR nesses casos). No processo o for vai ler a informação depois deletá-la, ler novamente a próxima informação e deletá-la até passar por todo o arquivo.

Pode até ser que o for fique mais lento, mas em termos de eficiência é muito melhor para a memória do seu computador.

Def ler_csv(nome_arquivo):

        For linha in open(nome_arquivo, “r”:

                 Yield linha

Vendas = ler_csv(“vendas.csv”)

Print(vendas)

For venda in vendas:

        Print(venda)

Um cuidado que você deve tomar é que o Yield está lendo uma linha do arquivo e depois joga a linha fora, então se você quiser imprimir uma lista após rodar o Yield pode ser que ele te apresente na lista apenas os resultados que ainda não foram descartados.

Outro ponto importante é que você pode criar qualquer estrutura lógica como o if dentro da função, porém, quando você estiver usando apenas um arquivo para ler é possível simplificar a estrutura:

Def ler_csv(nome_arquivo):

        Yield from open(nome_arquivo, “r”)

Vendas = ler_csv(“vendas.csv”)

Print(vendas)

For venda in vendas:

        Print(venda)

Imagem do código

Yield em Python

Veja que nestes casos mais simples não é necessário usar o FOR.

Conclusão – Yield em Python

Você já sabia como usar o Yield? Preparei esta aula para te explicar como funciona essa estrutura e como utilizar.

Com o yield, podemos criar uma função que lê arquivo de forma mais eficiente. Ao invés de retornar uma lista com todas as linhas, a função retorna um objeto iterator, ocupando menos espaço na memória.

Então podemos percorrer esse objeto iterator usando um loop for e processar cada linha conforme a necessidade.

Dessa forma o yield permite otimizar seu código, evitando problemas de memória e tornando o processamento mais eficiente.

Se você trabalha com linguagens e ferramentas do mercado de trabalho, dominar o yield pode ser um diferencial importante.

Eu fico por aqui! Um abraço,

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador