La syntaxe Yield From établit une connexion directe entre l'appelant et le sous-générateur, permettant aux données de circuler de manière transparente entre eux. Contrairement aux boucles for traditionnelles, qui ne peuvent produire que des valeurs, rendement from fournit un canal bidirectionnel. Cela revient à établir une connexion temporaire entre les sockets client, permettant à la fois la réception et l'envoi de données.
def reader():
"Simulates reading data from a source"
for i in range(4):
yield f"En utilisant le rendement de, nous pouvons parcourir le générateur de lecteur sans gérer manuellement la boucle.
Exemple : envoi de données à un coroutine
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
Dans cet exemple, la syntaxe rendement de permet à la fonction wrapper d'envoyer des données à la coroutinewriter(), établissant un échange direct de données.
Exception Handling
Yield from gère également la propagation des erreurs de manière transparente. Si le sous-générateur rencontre une exception, celle-ci peut être soit déclenchée à nouveau par l'appelant, soit gérée au sein du sous-générateur.
Exemple : Gestion des exceptions avec 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 garantit que les exceptions se propagent en douceur, sans qu'il soit nécessaire de gérer manuellement les exceptions dans la fonction wrapper.
Conclusion
Yield from est une syntaxe puissante qui simplifie la mise en œuvre de l'échange de données bidirectionnel entre l'appelant et les sous-générateurs, en gérant les exceptions de manière transparente. Il fournit un moyen transparent et efficace de communiquer entre ces composants, ce qui en fait un outil précieux pour gérer des scénarios de traitement de données complexes dans Python 3.3 et versions ultérieures.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3