O rendimento da sintaxe estabelece uma conexão direta entre o chamador e o subgerador, permitindo que os dados fluam perfeitamente entre eles. Ao contrário dos loops for tradicionais, que só podem gerar valores, o rendimento de fornece um canal bidirecional. Isso é análogo a estabelecer uma conexão temporária entre soquetes de clientes, permitindo o recebimento e o envio de dados.
def reader():
"Simulates reading data from a source"
for i in range(4):
yield f"Ao usar yield from, podemos iterar no gerador do leitor sem manipular manualmente o loop.
Exemplo: Envio de dados para uma corrotina
def writer():
"Simulates writing data to a destination"
while True:
w = (yield)
print(f">>> {w}")
writer_wrapper = writer_wrapper(writer())
for i in range(4):
wrap.send(i) # Output: >>> 0, >>> 1, >>> 2, >>> 3
Neste exemplo, o rendimento da sintaxe permite que a função wrapper envie dados para a corrotina escritor(), estabelecendo uma troca direta de dados.
Tratamento de exceções
Yield from também lida com a propagação de erros de forma transparente. Se o subgerador encontrar uma exceção, ela poderá ser gerada novamente pelo chamador ou tratada dentro do subgerador.
Exemplo: tratamento de exceção com SpamException
class SpamException(Exception):
pass
def writer():
while True:
try:
w = (yield)
except SpamException:
print("***")
else:
print(f">>> {w}")
writer_wrapper = writer_wrapper(writer())
# Raising an exception within the wrapper
wrap.throw(SpamException)
# Expected Output: ***
Yield from garante que as exceções sejam propagadas sem problemas, sem a necessidade de tratamento manual de exceções na função wrapper.
Conclusão
Yield from é uma sintaxe poderosa que simplifica a implementação da troca bidirecional de dados entre chamadores e subgeradores, lidando perfeitamente com exceções. Ele fornece uma maneira transparente e eficiente de comunicação entre esses componentes, tornando-o uma ferramenta valiosa para lidar com cenários complexos de processamento de dados em Python 3.3 e posterior.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3