Je suis tombé sur le mot-clé rendement en lisant le code source python d'autres personnes. Je l'ai finalement compris grâce à diverses recherches :
Dans la boucle for...in... habituelle, in est suivi d'un tableau. Ce tableau est un objet itérable, similaire aux listes chaînées, aux chaînes et aux fichiers. Cela peut être mylist= [1, 2, 3] ou mylist = [x*x for x in range(3)]. Son inconvénient est que toutes les données sont en mémoire, et s'il y a une grande quantité de données, cela consommera beaucoup de mémoire. (Apprentissage recommandé :Tutoriel vidéo Python)
Le générateur peut être itéré, mais il ne peut être lu qu'une seule fois. Parce qu'il est généré lorsqu'il est utilisé. Par exemple, mygenerator = (x*x for x in range(3)), notez que () est utilisé ici, ce n'est pas un tableau et l'exemple ci-dessus est []. La clé de ma compréhension de la capacité d'un générateur à itérer est qu'il dispose d'une méthode next(). Le principe de fonctionnement est d'appeler la méthode next() à plusieurs reprises jusqu'à ce qu'une exception soit interceptée. Vous pouvez utiliser le mygenerator ci-dessus pour tester.La fonction avec rendement n'est plus une fonction ordinaire, mais un générateur qui peut être utilisé pour l'itération. Le principe de fonctionnement est le même que ci-dessus.
yield est un mot-clé similaire à return Lorsque le rendement est rencontré au cours d'une itération, la valeur après le rendement est renvoyée. Le fait est que lors de l'itération suivante, l'exécution démarre à partir du code après le rendement rencontré lors de l'itération précédente.
Brève compréhension :yield signifie que return renvoie une valeur et se souvient de la position renvoyée, et la prochaine itération commencera à partir de cette position.
Les fonctions avec rendement ne sont pas seulement utilisées dans les boucles for, mais peuvent également être utilisées comme paramètres d'une fonction, tant que les paramètres de cette fonction autorisent les paramètres d'itération. Par exemple, la fonction array.extend, son prototype est array.extend(iterable). La différence entre send(msg) et next() est que send peut transmettre des paramètres à l'expression de rendement. Les paramètres transmis à ce moment seront utilisés comme valeur de l'expression de rendement et les paramètres de rendement. sont les valeurs renvoyées à l'appelant. ——En d'autres termes, send peut modifier de force la valeur précédente de l'expression de rendement. Par exemple, il y a une affectation de rendement dans la fonction, a= rendement 5. La première itération ici renverra 5, et a n'a pas encore été attribué. Dans la deuxième itération, utilisez .send(10), puis la valeur de l'expression a est modifiée de force à 10, qui était à l'origine None, puis a=10send(msg) et next() tous les deux. sont des valeurs de retour. Leur valeur de retour est la valeur de l'expression après rendement lorsque l'itération actuelle rencontre rendement. En fait, c'est le paramètre après rendement dans l'itération actuelle. Le premier appel doit être next() ou send(None), sinon une erreur sera signalée. La raison pour laquelle il s'agit de None après l'envoi est qu'il n'y a pas de rendement précédent à ce moment (selon l'article 8). ). On peut considérer que next() équivaut à send(None). Pour plus d'articles techniques liés à Python, veuillez visiter la colonneTutoriel Python pour apprendre !
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!