Maison > développement back-end > Tutoriel Python > Une brève introduction à l'expression de rendement en python (avec des exemples)

Une brève introduction à l'expression de rendement en python (avec des exemples)

不言
Libérer: 2018-10-08 16:25:30
avant
2762 Les gens l'ont consulté

Cet article vous apporte une brève introduction à l'expression de rendement en python (avec des exemples). Elle a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

L'expression de rendement est utilisée dans la fonction génératrice

Lors de l'appel de la fonction génératrice, un itérateur est renvoyé (les instructions dans la fonction ne seront pas exécutées). l'expression de rendement est exécutée,

La fonction actuelle suspend l'exécution, renvoie la valeur de l'expression à l'appelant, continue d'appeler la fonction itérateur et reprend l'exécution à partir du point de pause. ,

Lorsque vous rencontrez une expression de rendement, c'est similaire à la rencontre d'autres expressions. L'expression de rendement a également une valeur, généralement Aucune.

La différence avec les autres expressions est que l'expression rendement renvoie la valeur de l'expression à rendement

Le document officiel le décrit comme suit :

Quand une fonction génératrice est appelée , il renvoie un itérateur appelé générateur. Ce générateur contrôle ensuite l’exécution du générateur. fonction. L’exécution démarre lorsqu’une des méthodes du générateur est appelé. A ce moment-là, l'exécution passe au premier rendement. expression, où elle est à nouveau suspendue, renvoyant la valeur de expression_list à l’appelant du générateur. Par suspendu, nous entendons cela. tous les états locaux sont conservés, y compris les liaisons actuelles des états locaux les variables, le pointeur d'instruction, la pile d'évaluation interne et l'état de toute gestion d'exception lorsque l'exécution est reprise par. en appelant l’une des méthodes du générateur, la fonction peut procéder exactement comme si l'expression de rendement n'était qu'un autre appel externe. La valeur. de l'expression du rendement après la reprise dépend de la méthode utilisée a repris l'exécution. Si __next__() est utilisé (généralement via un for ou le next() intégré), alors le résultat est None. Sinon, si send() est. utilisé, le résultat sera la valeur transmise à cette méthode.

Les expressions de rendement sont autorisées n'importe où dans une construction try. le générateur n'est pas repris avant d'être finalisé (en atteignant un zéro décompte de références ou en étant ramassé), le générateur-itérateur La méthode close() sera appelée, permettant à toutes les clauses final en attente de exécuter.

Lorsque l'itérateur sous-jacent est terminé, la valeur L'attribut de l'instance StopIteration déclenchée devient la valeur du expression de rendement.

Exemple officiel :

>>> def echo(value=None):
...     print("Execution starts when 'next()' is called for the first time.")
...     try:
...         while True:
...             try:
...                 value = (yield value)
...             except Exception as e:
...                 value = e
...     finally:
...         print("Don't forget to clean up when 'close()' is called.")
...>>> generator = echo(1)>>> print(next(generator))
Execution starts when 'next()' is called for the first time.1
>>> print(next(generator))
None>>> print(generator.send(2))2
>>> generator.throw(TypeError, "spam")
TypeError('spam',)>>> generator.close()
Don't forget to clean up when 'close()' is called.
Copier après la connexion

Simuler une itérateurversiongammefonction

def my_range(start, stop=None, step=1):
    if not stop:
        stop = start
        start = 0
    while start < stop:
        yield start
        start += step


if __name__ == &#39;__main__&#39;:
    for i in my_range(10):
        print(i)
    for i in my_range(0, 10):
        print(i)
    for i in my_range(0, 10, 2):
        print(i)
Copier après la connexion

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!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal