Maison >développement back-end >Tutoriel Python >Rendement du générateur en python
Rendement du générateur : l'utilisation de l'instruction de rendement
permet à la fonction de générer une séquence de résultats au lieu d'une simple valeur
def countdow(n): print("Start!"); while n>0: yield n; n -= 1; c = countdow(5); print(c.__next__()) print(c.__next__())
Résultat de sortie :
Start! 5 4
La méthode __next__() entraîne l'exécution de la fonction génératrice jusqu'à la prochaine instruction rendement. À ce moment, la méthode __next__() transmet la valeur de retour à rendement et la fonction suspend temporairement l'exécution
La fonction continue de s'exécuter lorsque. appeler à nouveau __next__(). Le processus continue jusqu'à ce que la fonction génératrice revienne à la fin
Habituellement, la méthode __next__() n'est pas appelée manuellement
mais une boucle est utilisée
for i in countdow(5): print(i);
Résultat de sortie :
5 4 3 2 1
Le générateur est un moyen puissant d'écrire des programmes basés sur des pipelines de traitement, des flux ou des flux de données
Par exemple :
def tail(f): for line in f: if not line : #如果 非真 则暂时休眠并且再次尝试 time.sleep(0.1); continue; yield line; # 将获取到的文件中的值 生成一个序列的值 filecount = tail(open('E:/work.txt')); #grep方法 用于在上面方法生成器中查找特定的子字符串 def grep(lines,searchtext): for line in lines: if searchtext in line : yield line; lines = grep(filecount,'tom'); #查找带有tom 的子字符串 for line in lines: print(line);
Résultat de sortie : 'tom',120,132
Résumé :
Le rôle du générateur : lorsque le programme s'exécute pour rendement, la valeur en cours
est transmise à rendement. Le programme ne produit pas, ce qui peut être considéré comme le. le programme est actuellement dans un état suspendu. Lors de l'utilisation de la méthode __next__() Lorsque la fonction continue de s'exécuter
jusqu'à ce qu'elle rencontre à nouveau rendement
Avantages : rendement ne stocke pas une seule valeur, mais enregistre la valeur. état d'exécution actuel du programme au lieu de calculer tous les éléments en même temps mais de les calculer une fois pour économiser de l'espace mémoire