Maison >développement back-end >Tutoriel Python >Explication détaillée des exemples de codes de rendement et de générateur en python

Explication détaillée des exemples de codes de rendement et de générateur en python

高洛峰
高洛峰original
2017-03-15 14:01:471771parcourir

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!

Déclaration:
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