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.
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__ == '__main__': 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)
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!