Como usar Yield no Python?

Como usar Yield no Python?

26 de julho de 2021 0 Por Ramos de Souza Janones

Yield no Python é usado sempre que você precisa definir uma função de gerador de algo. Você não pode usar yield fora de um generator function.

O Python tem especificidades próprias mas essencialmente em todas linguagens funcionam igual. Ele cria um generator, ou seja, cria uma lista de dados que vão sendo consumidos sob demanda. Em geral é usado para dar melhores abstrações ao código. Tudo que se faz com ele, dá para fazer sem ele de forma muito semelhante, mas expondo o mecanismo de geração dos dados.

Quando você usa a instrução yield dentro de uma função, ela se transforma em uma função geradora.

Função geradora é uma função que retorna mais do que um valor – retorna uma série de valores.

Um uso comum é dentro de loops, como por exemplo:

LEIA TAMBÉM:  PHP Do Zero Ao Profissional – Análise do Curso




Queremos criar melhores conteúdos:

Criamos uma pesquisa sobre o seu perfil profissional:
  1. Principais objetivos;
  2. Principais Problemas no seu dia a dia;
  3. Principais Alegrias.
Participe: Pesquisa Ramos da Informática – Queremos te conhecer melhor.
for value in simpleGeneratorFun():  
     print(value)

A declaração da função geradora seria algo assim:

def simpleGeneratorFun():
    for i in range (1, 4):
        yield i

Sempre que a instrução yield ocorre dentro da função geradora, o programa pausa a execução e retorna o valor para o chamador. No exemplo acima, ela retorna um value no for.

yield retém o estado da função onde ela é pausada (ao retornar o value).

Você pode chamar a função geradora, contanto que não tenha atingido sua última declaração, ou seja, na primeira vez que chamar simpleGeneratorFun() ela vai retornar 1. Na segunda, irá retornar 2, até chegar em 4.

LEIA TAMBÉM:  Como criar aprendizado de máquinas em Java?

Outro exemplo de uso do Yield no Python

def impar(elems):
    for i in elems:
        if i % 2:
            yield i

for x in impar(range(1000)):

Este código imprimirá todos os ímpares de 0 à 1000. Ele vai chamar o método 500 vezes, cada vez trará um número ímpar. O compilador/biblioteca montará a estruturá interna para saber em que número ele está em cada chamada.

LEIA TAMBÉM: Python: Expressão regular que reconheça palavras na língua portuguesa

Claro que tem uma variável escondida que sobrevive além do ambiente interno da função. Então esse i não começa de novo em cada chamada da função. Note que você pode chamar a função impar() sem saber como ela faz a seleção internamente.

Este exemplo é simples e óbvio, mas pense em coisas mais complexas. Você abstrai melhor. Você diz que vai chamar um método que filtra os ímpares para você. Não interessa como. O que você vai fazer com a informação gerada é problema seu. A função com o yield tem responsabilidade única de gerar a informação.

LEIA TAMBÉM:  O futuro do C#: Tuplas e estruturas anônimas

Outro exemplo:

def numeros():
    yield 1
    yield 2
    yield 3

print numeros()
print numeros()
print numeros()

O qual irá imprimir 1, 2 e 3.

E-Book gratuitos para se atualizar:

VOCÊ ESTÁ NA SEÇÃO:  » Programação » Python

votes
Article Rating

E-Zine Ramos da Informática

* indicates required

View previous campaigns.