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

高洛峰
Libérer: 2017-03-15 14:01:47
original
1788 Les gens l'ont consulté

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)
Copier après la connexion

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
Copier après la connexion

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()
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal