O Que a Palavra-Chave Yield Faz em Python?

Ana Maria Gomes
4 minutos de leitura

Conteúdos do tutorial

Entender a palavra-chave yield em Python é essencial para qualquer programador Python, especialmente ao lidar com grandes conjuntos de dados ou fluxos de dados. Neste post, vamos explorar o que yield faz, como se relaciona com geradores e por que é útil.

Iteráveis e Geradores

Antes de nos aprofundarmos em yield, vamos esclarecer dois conceitos: iteráveis e geradores.

Iteráveis

Um iterável é qualquer objeto Python sobre o qual você pode iterar usando um loop for. Listas, strings e tuplas são todos exemplos de iteráveis. Quando você itera sobre uma lista, pode ler seus itens um por um, o que é conhecido como iteração.

minha_lista = [1, 2, 3]
for i in minha_lista:
    print(i)
Testar

Compreensões de lista também criam iteráveis:

minha_lista = [x*x for x in range(3)]
for i in minha_lista:
    print(i)
Testar

Embora os iteráveis sejam práticos, eles podem consumir muita memória se você estiver lidando com um grande número de valores, pois todos os dados que estão dentro deles são mantidos em memória RAM.

Geradores

Geradores são um tipo especial de iterável que você só pode iterar uma vez. Eles não armazenam todos os valores na memória; em vez disso, os valores de um gerador são gerados na hora da iteração, um a um. Isso significa que um gerador nunca estourará a memória do seu computador, embora você só possa iterar sobre seus valores uma única vez.

meu_gerador = (x*x for x in range(3))
for i in meu_gerador:
    print(i)
Testar

Note o uso de parênteses () em vez de colchetes []. Esta é a diferença que faz um objeto ser um gerador.

A Palavra-Chave Yield

A palavra-chave yield transforma uma função em um gerador. Ao contrário de return, que envia um valor especificado de volta para quem chamou, yield pode produzir uma sequência de valores. Dizemos que a função gera esses valores.

Aqui está um exemplo simples:

def criar_gerador():
    for i in range(3):
        yield i*i

meu_gerador = criar_gerador()
for i in meu_gerador:
    print(i)
Testar

Quando você chama uma função que contém yield, ela não executa o código da função. Em vez disso, retorna um objeto gerador. Esse gerador então processa o código da função cada vez que o loop for solicita um novo item.

Resumo

Em resumo, a palavra-chave yield em Python é usada para criar um gerador que pode produzir uma sequência de valores para iteração. Quando uma função contendo yield é chamada, ela retorna um objeto gerador que é então iterado para recuperar valores um de cada vez. Isso é particularmente útil para eficiência de memória e ao lidar com sequências grandes ou potencialmente infinitas. Ao dominar yield, você pode escrever códigos Python mais eficientes que lidam com grandes conjuntos de dados com facilidade.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial