Maison >développement back-end >Tutoriel Python >Explication détaillée des exemples de codes de rendement et de générateur en python
On importe d'abord depuis un petit programme, chacun définit une liste, et y trouve les nombres premiers, on écrira comme ça
import math def is_Prims(number): if number == 2: return True //除2以外的所有偶数都不是素数 elif number % 2 == 0: return False //如果一个数能被除1和本身之外的数整除,则为合数。其实我们的判定范围到根号n就可以 for cur in range(2,int(math.sqrt(number))+1,2): if number % cur == 0: return False else: return True def get_Prims(input_list): result_list = list() for element in input_list: if is_Prims(element): result_list.append(element) return result_list aa = get_Prims([1,2,3,4,5,6,7,8,9]) print (aa)
Mais si on veut donner un nombre, puis lister tous les nombres premiers supérieurs à ce nombre ? Nous pourrions écrire comme ceci :
def get_Prims(number): if is_Prims(number): return number
Mais une fois que la fonction return se termine complètement après avoir confié le contrôle à l'appelant, toutes les variables locales et le travail de la fonction sont supprimés, le prochain appel recommencera à zéro. On peut donc utiliser la méthode d'écriture suivante :
def get_Prims(number): while(True): if is_Prims(number): yield number number += 1 def get_numbers(): total = list() for next_prim in get_Prims(2): if next_prim < 100: total.append(next_prim) else: print(total) return get_numbers()
Expliquons la fonction génératrice. Le code def d'une fonction contient du rendement, et la fonction devient automatiquement une fonction génératrice (même si elle contient toujours du retour). , générateur La fonction crée un générateur (une forme spéciale d'itérateur, cet itérateur a une méthode next() intégrée). Lorsqu'une valeur est nécessaire, elle est générée via le rendement au lieu du retour direct. Par conséquent, contrairement aux fonctions ordinaires, le. contrôle Les droits n'ont pas été cédés.
for loop appellera implicitement la fonction next(). La fonction next() est responsable de l'appel de la méthode next() dans le générateur. renvoyant une valeur à tout appel à la méthode next(), utilisez rendement pour retransférer cette valeur, ce qui est équivalent à l'instruction return.
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!