A palavra-chave yield em Python

Muhammad Waiz Khan 10 outubro 2023
A palavra-chave yield em Python

Este tutorial explicará o propósito e o uso da palavra-chave yield em Python. A palavra-chave yield é uma instrução Python usada para definir as funções geradoras em Python. A instrução yield só pode ser usada dentro do corpo da função.

A principal diferença entre uma função geradora e uma função regular é que a função geradora contém uma expressão yield em vez da instrução return. A instrução yield produz a série de valores denominada iterador gerador como saída. Novos valores do iterador podem ser recuperados usando a função next() ou o loop for.

Cada vez que a função next() é chamada ou a cada iteração do loop for, a instrução yield produz ou produz um novo valor e salva o estado de execução da função, ou seja, os valores das variáveis ​​locais, etc. Em cada nova chamada de função next() ou iteração, a instrução yield é retomada do último estado salvo, ao contrário da instrução return que começa em cada chamada.

Códigos de exemplo da palavra-chave yield em Python

Como o funcionamento da instrução yield é claro, vamos agora dar uma olhada em seus usos e códigos de exemplo. Suponha que temos uma grande quantidade de dados e eles não podem ser carregados de uma vez em um objeto iterável, ou queremos uma maneira mais eficiente de memória para ler os dados. Podemos criar uma função geradora usando a declaração de rendimento; a função lerá e produzirá o novo bloco de dados a cada iteração ou chamada de função next().

O código de exemplo a seguir demonstra como usar a instrução yield com o loop for para criar uma função geradora simples em Python. A função do gerador my_generator() no código de exemplo a seguir produzirá o novo número de 1 a 100 e funcionará até 99 chamadas.

def my_generator():
    for x in range(1, 100):
        print("new value is generated!")
        yield x

Precisamos primeiro de um objeto iterador gerador para gerar valores usando a função next() ou por meio de iteração.

gen_iter = my_generator()

Agora vamos obter os novos valores do iterador gerador usando a função next(); também podemos usar a função next() como iterator.__next__(), conforme mostrado no código de exemplo abaixo.

val = next(gen_iter)
print("Value =", val)

val = gen_iter.__next__()
print("Value =", val)

Resultado:

new value is generated!
Value = 1
new value is generated!
Value = 2

O outro método para obter novos valores é iterar por meio do objeto iterador gerador usando o loop for; o código de exemplo a seguir demonstra como iterar por meio do objeto gerador de iterador em Python.

for val in gen_iter:
    print("Value =", val)

O exemplo de código acima irá gerar todos os valores 99 do intervalo especificado na função do gerador.

Também podemos criar uma função geradora sem o loop for usando a instrução yield várias vezes, conforme demonstrado no código de exemplo abaixo.

def my_generator():

    x = 1
    print("new value is generated!")
    yield x
    x = x + 1
    print("new value is generated!")
    yield x
    x = x + 1
    print("new value is generated!")
    yield x

Agora, vamos usar nossa nova função de gerador para gerar todos os valores usando o loop for.

gen_iter = my_generator()
for val in gen_iter:
    print("Value =", val)

Resultado:

new value is generated!
Value = 1
new value is generated!
Value = 2
new value is generated!
Value = 3

Artigo relacionado - Python Keyword