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