Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse von Ertrag und Generator in Python

Analyse von Ertrag und Generator in Python

高洛峰
高洛峰Original
2017-03-07 16:38:541320Durchsuche

Zuerst importieren wir aus einem kleinen Programm, definieren jeweils eine Liste und suchen darin die Primzahlen. Wir werden so schreiben

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)

Aber wenn wir eine Zahl angeben und dann auflisten möchten die Zahlen, die kleiner als diese Zahl sind. Was ist mit allen Primzahlen, die groß sind? Wir könnten so schreiben:

def get_Prims(number):    
if is_Prims(number):        
return number

Aber sobald die Return-Funktion die Kontrolle an den Aufrufer übergibt und vollständig beendet wird, werden alle lokalen Variablen und Funktionsarbeiten verworfen und der nächste Aufruf beginnt von vorne. Daher können wir die folgende Schreibmethode verwenden:

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()

Erklären wir die Generatorfunktion. Der Def-Code einer Funktion enthält yield und die Funktion wird automatisch zu einer Generatorfunktion (auch wenn sie noch return enthält). , Generator Die Funktion erstellt einen Generator (eine spezielle Form des Iterators, dieser Iterator verfügt über eine integrierte __next__()-Methode. Wenn ein Wert benötigt wird, wird er im Gegensatz zu gewöhnlichen Funktionen durch „yield“ generiert). Diesmal wird die Kontrolle nicht übergeben.

Die for-Schleife ruft implizit die Funktion next() auf. Die Funktion next() ist für den Aufruf der Methode __next__() im Generator verantwortlich Methode, die next() aufruft. Use Yield gibt diesen Wert zurück, was der return-Anweisung entspricht.

Weitere Artikel zur Ertrags- und Generatoranalyse von Python finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn