sábado, 5 de dezembro de 2020

Quando usar yield em vez de return em Python?

A declaração de yield suspende a execução da função e envia um valor de volta para o chamador, mas retém o estado suficiente para permitir que a função continue de onde foi interrompida. Quando retomada, a função continua a execução imediatamente após a última execução de yield. Isso permite que seu código produza uma série de valores ao longo do tempo, em vez de computá-los de uma vez e enviá-los de volta como uma lista.

Vejamos com um exemplo:

# Um programa Python simples para demonstrar o funcionamento do yield

# Uma função geradora que produz 1 pela primeira vez,
# na 2 segunda vez e 3 na terceira vez
def simpleGeneratorFun():
    yield 1
    yield 2
    yield 3

for value in simpleGeneratorFun():
    print(value) 

Resultado:

1
2
3

Return envia um valor especificado de volta para seu chamador, enquanto Yield pode produzir uma sequência de valores. Devemos usar o Yield quando queremos iterar em uma sequência, mas não queremos armazenar a sequência inteira na memória.

O Yield é usado em geradores Python. Uma função geradora é definida como uma função normal, mas sempre que precisa gerar um valor, ela o faz com a palavra-chave Yield em vez de return. Se o corpo de um def contiver yield, a função se tornará automaticamente uma função geradora.

# Um programa Python para gerar quadrados de 1
# a 100 usando yield e, portanto, gerando
# Uma função de gerador infinito que imprime o
# próximo número quadrado. Começando com 1
def nextSquare():
    i = 1; 

    # Um loop infinito gerando o quadrado de cada número 
    while True: 
        yield i*i
        i += 1

for num in nextSquare():
    if num > 100:
        break
    print(num)

Resultado:

1
4
9
16
25
36
49
64
81
100

Artigo escrito por Arpit Agarwal, melhorado por julthep e traduzido por Acervo Lima de When to use yield instead of return in Python?

0 comentários:

Postar um comentário