A declaração de rendimento é usada para definir geradores em Python. Portanto, antes de entendermos exatamente o que o rendimento produz, precisamos entender primeiro o conceito de geradores. Os geradores têm um papel significativo no Python e, se você gosta muito da programação do Python, é provável que já tenha trabalhado com geradores do Python. Geradores são usados para criar iteradores em Python, mas com uma abordagem diferente.
A Python Generators são funções que produzem uma sequência de resultados e podem ser pausadas e retomadas dinamicamente. Os geradores foram adicionados pela primeira vez como um recurso opcional no Python 2.2 e padronizados no Python 2.3. Embora eles fossem poderosos o suficiente, as funções dos geradores foram significativamente aprimoradas no Python 2.5.
Quando os geradores foram adicionados novamente no Python 2.2, ele introduziu uma nova palavra-chave “yield” para compatibilidade com versões anteriores, para a qual precisamos importar geradores do módulo _future_ para usá-los. Isso foi alterado na versão 2.3 do Python quando os geradores se tornaram padrão e não era mais necessário.
A instrução yield suspende a execução de uma função e envia um valor de volta para o chamador, enquanto salva o estado e retoma mais tarde, o que significa que todo o gerador em si ainda pode ser retomado depois que o valor de retorno for obtido. Uma declaração de retorno finaliza a execução da função e envia um valor de volta ao chamador. Sem ele, sua função não retorna nada. Vamos dar uma boa olhada em quando usar yield e quando usar return em Python para entender melhor a diferença entre os dois.
A declaração de rendimento é usada nos geradores Python para substituir o retorno de uma função para enviar um valor de volta ao seu chamador sem destruir as variáveis locais. Para entender melhor qual o papel da declaração de rendimento na programação Python, você precisa entender o que são os geradores.
As funções do gerador são produzidas por definição, assim como as funções regulares, mas contêm uma instrução "yield". Isso começa com a palavra-chave "yield", que especifica o objeto gerador a ser retornado ao chamador. Um gerador é uma função especial no Python que retorna um objeto gerador ao chamador em vez de um valor de dados. A palavra-chave yield possui a capacidade exclusiva de interromper a execução da função, salvar o estado e continuar posteriormente.
A declaração de retorno, diferente da declaração de rendimento, sai de uma função, devolvendo um valor ao seu chamador. As funções retornam um valor aos chamadores e as que são de natureza mais procedural não explicitamente retornam nada. Embora uma função possa ter várias instruções de retorno, apenas uma delas pode ser chamada para qualquer chamada específica da função.
Normalmente, uma instrução de retorno aparece no final de um bloco de função para retornar o resultado final da execução de todas as instruções contidas nessa função. No entanto, também pode aparecer anteriormente no bloco de funções para interromper a execução de todas as instruções subseqüentes nesse bloco. Isso retoma imediatamente a execução do programa no chamador. Quando nenhum valor é especificado, o tipo de objeto de retorno equivalente em Python é "None".
Sintaticamente, yield é uma palavra-chave que pode ser usada como a palavra-chave return, exceto que a instrução return encerra a execução da sua função e envia um valor ao seu chamador. A funcionalidade da declaração de retorno é receber entradas e retornar algo ao chamador. Ao contrário de um retorno, a declaração de rendimento é explicitamente usada para definir geradores, substituindo o valor de retorno de uma função para suspender sua execução, mantendo as variáveis locais intactas, enquanto a declaração de retorno destrói todas as variáveis locais dentro.