Eine kurze Einführung in Generatoren und Iteratoren in Python (mit Beispielen)

不言
Freigeben: 2018-09-27 14:53:59
Original
2579 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine kurze Einführung in Generatoren und Iteratoren in Python (mit Beispielen). Ich hoffe, er wird Ihnen als Referenz dienen.

Iterator

Wenn in Python ein Objekt in einer Schleife durch jedes Element im Objekt durchlaufen werden kann, wird der Prozess als Iteration bezeichnet. Zum Beispiel Wörterbuch, Zeichenfolge, Liste, Tupel, Menge usw. Der Grund, warum sie iteriert werden können, liegt darin, dass sie alle eine gemeinsame integrierte Funktion __iter__ haben. Durch Ausführen der Funktion __next__ eines integrierten Objekts können alle Elemente des Objekts nacheinander gedruckt werden. Es gibt zum Beispiel eine Liste, die Werte von 1-100 speichert, wir wollen aber nur die ersten 50 Elemente drucken.

flag=True
l=[x for x in range(1,101)]
l_iter = l.__iter__()
while flag:
    try:
       item=l_iter.__next__()
       if item==51:
           flag=False
           break
       else:
           print(item)
    except:
        break
Nach dem Login kopieren

In der While-Schleife führt der Iterator immer die Funktion __next__() aus, aber der Iterator selbst weiß nicht, wie viele Elemente er iterieren möchte. Wenn das letzte Element ausgeführt wird, wird die Funktion __next__() weiterhin ausgeführt, aber zu diesem Zeitpunkt gibt es keine Elemente, die iteriert werden können, da der Iterator das Element, das iteriert werden kann, nicht finden kann, wird ein Fehler gemeldet. Wenn wir die while-Schleife verwenden, verwenden wir sie daher zusammen mit dem Code zum Abfangen von Ausnahmen. Wenn während des Iterationsprozesses eine Ausnahme auftritt, wird die nächste Schleife automatisch gestoppt.

Generator:

Angenommen, wir haben die Anforderung, dass die anderen Elemente mit Ausnahme des ersten und zweiten Elements die Summe der ersten beiden Elemente sind.

Wir können so schreiben

def fib1(max):
    n,a,b=0,0,1
    while n<max:
        print(b)
        a,b=b,a+b
        n=n+1
    return &#39;done&#39;

a=fib1(5)
print(a)
Nach dem Login kopieren

Das Ausgabeergebnis

1
1
2
3
5
done
Nach dem Login kopieren

Der Ableitungsprozess ist wie in der Abbildung dargestellt

Eine andere Methode verwenden

def fib2(max):
    n,a,b=0,0,1
    while n<max:
        yield b
        a,b=b,a+b
        n=n+1
    return &#39;done&#39;
Nach dem Login kopieren

Funktion aufrufen

a=fib2(5)
print(a)
Nach dem Login kopieren

Ergebnis ausgeben 1

Zu diesem Zeitpunkt haben wir festgestellt, dass die Ergebnisse nicht wie zuvor direkt angezeigt werden können. Die zu diesem Zeitpunkt definierte FIB ist keine einfache Funktion, sondern wurde in einen Generator umgewandelt. Wenn Sie die generierten Ergebnisse wissen möchten, können Sie die Funktion __next__ nacheinander ausführen. Es wird jedoch jedes Mal nur ein Ergebnis zurückgegeben. Eine Ausnahme wird ausgelöst, wenn keine Elemente mehr iteriert werden können.

Darüber hinaus können wir auch die for-Schleife und while (muss mit try außer verwendet werden) verwenden, um die Ergebnisse auszudrucken.

 a=fib2(5)
 for c in a:
    print(c)
Nach dem Login kopieren

Ausgabeergebnisse anzeigen 1 1 2 3 5.

Vorteile der Verwendung von Generatoren: Generatoren berechnen das nächste Element basierend auf dem Ableitungsprozess. Schauen wir uns die ersten beiden Funktionen fib1 und fib2 an, die einen festen Speicherplatz im Computer öffnen, um die vollständigen Berechnungsergebnisse zu speichern. Wenn wir jedoch auf ein bestimmtes Element in den Berechnungsergebnissen zugreifen möchten, müssen wir die gesamte Berechnung durchlaufen Wir können die gewünschten Ergebnisse zuerst durch Objektindizes oder durch Verwendung von for-Schleifen und bedingten Beurteilungen erzielen. Dies kann unsere Anforderungen erfüllen, verbraucht jedoch mehr Speicherplatz. fib2 berechnet das nächste Element basierend auf dem Inferenzprozess, sodass wir das gewünschte Element erhalten können, bevor wir das vollständige Objekt erstellen. Dadurch wird der Speicherverbrauch reduziert.

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in Generatoren und Iteratoren in Python (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!