Maison >développement back-end >Tutoriel Python >Que fait la fonction « send » de Python dans les générateurs ?

Que fait la fonction « send » de Python dans les générateurs ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 08:50:02518parcourir

What Does Python's

Comprendre l'utilité de « envoyer » dans les générateurs Python

Bien que le concept de « rendement » dans les générateurs Python soit largement compris, le but de la fonction "envoyer" reste ambigu. Pour clarifier, la fonction « envoyer » permet la transmission de valeurs dans un générateur qui a récemment généré une valeur.

Considérons l'exemple simpliste suivant :

<code class="python">def double_inputs():
    while True:
        x = yield
        yield x * 2</code>

Lors de la création d'une instance de générateur (gen), l'exécution de l'instruction next(gen) initialise le générateur et suspend l'exécution à la première occurrence de « rendement ». Par la suite, l’invocation de gen.send(10) injecte la valeur 10 dans la variable « rendement ». Le générateur renvoie ensuite la valeur 20, représentant le résultat de l'opération de multiplication.

Cette capacité à transmettre des valeurs aux générateurs à l'aide de "send" le distingue de "yield" qui fournit principalement des valeurs à partir d'un générateur.

Une application importante de "send" réside dans le décorateur "@defer.inlineCallbacks" de Twisted. Il permet l'exécution transparente de fonctions telles que :

<code class="python">@defer.inlineCallbacks
def doStuff():
    result = yield takesTwoSeconds()
    nextResult = yield takesTenSeconds(result * 10)
    defer.returnValue(nextResult / 10)</code>

Dans cet exemple, "takesTwoSeconds" renvoie initialement un objet "Deferred". Twisted attribue ce calcul à un thread d'arrière-plan et, une fois terminé, le résultat est injecté dans le générateur doStuff en attente via « envoyer ». Ce mécanisme simplifie la structure du code, permettant un flux plus linéaire et plus compréhensible lorsqu'il s'agit d'opérations asynchrones.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn