[Python] Generatorfunktion

Einführung

Dieser Artikel ist ein Artikel zum Studium der Generatorfunktion, da er ohne Verständnis der Generatorfunktion nicht verwendet werden konnte. Der Inhalt ist ein persönliches Memorandum mit Verweisen.

Definition

Überprüfen Sie zunächst die Definition der Generatorfunktion.

--Definition: Generatorfunktion [^ 1]

Wenn in der Funktionsdefinition eine Yield-Anweisung verwendet wird, wird die Funktion als Generatorfunktion bezeichnet. Generatorfunktionen sind eine Art Iterator.

Beispiel: Führen Sie eine Generatorfunktion mit Yield in Python 3.7.4 aus. Gibt Werte zurück, die durch Yield getrennt sind.

def sample_generator_fun():
    yield 1
    yield 2
    yield 3

check = sample_generator_fun()
print(check.__next__())
print(check.__next__())
print(check.__next__())

Ausführungsergebnis

1
2
3

Wenn Sie eine weitere Prüfung durchführen ...

print(check.__next__())
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-25-7029da5797f2> in <module>
----> 1 print(check.__next__())

StopIteration:

Es wird als Stoppwiederholung angezeigt und es tritt ein Fehler auf. Das heißt, die Yield-Anweisungen von sample_generator_fun werden nacheinander ausgeführt, die Iteration endet, wenn die dritte "Yield 3" ausgeführt wird, und es wird kein Wert zurückgegeben, selbst wenn sie weiter ausgeführt wird.

Fehlerbeispiel

Ich habe die Generatorfunktion nicht richtig verstanden, sie als dasselbe wie ein Iteratorobjekt wie eine Liste angesehen und die folgenden Fehler gemacht. * Erstens schämte ich mich, die Existenz der Generatorfunktion nicht zu kennen.

Beispiel: Überprüfen Sie, ob die Anzahl der Iteratoren der erhaltenen Generatorfunktion mehr als 2 beträgt, und führen Sie sie gegebenenfalls aus.

** Fehlerbeispiel **

check = sample_generator_fun()

if len(list(check)) > 2:
    print("True")
    for i in check:
        print(i)
else:
    print("False")

Ausführungsergebnis

True

Hier habe ich mich gefragt, warum die for-Anweisung unten nicht ausgeführt wurde, obwohl sie in der if-Anweisung True war, und ich konnte dies auf verschiedene Weise herausfinden und zur Generatorfunktion gelangen. Liste (Prüfung) im bedingten Ausdruck Bei der Ausführung wird die letzte "Ausbeute 3" ausgeführt. In der nächsten for-Anweisung gibt check also keinen Wert zurück, sodass die for-Anweisung nicht ausgeführt wird.

Lösung

Es gibt zwei Dinge, an die Sie leicht denken können. Wenn Sie die Generatorfunktion mehrmals aufrufbar machen möchten, [dieser Artikel] (https://qiita.com/tomotaka_ito/items/15b5999c76001dbc9a58) Es ist möglicherweise besser, etwas wie [^ 2] zu tun.

check = sample_generator_fun()
check_list = list(check)

if len(check_list) > 2:
    print("True")
    for i in check_list:
        print(i)
else:
    print("False")

Ausführungsergebnis

True
1
2
3
check = sample_generator_fun()

n = 0
for i in check:
    n += 1
    if n > 2:
        print("True")
        check = sample_generator_fun()
        for j in check:
            print(j)
        break
else:
    print("False")

Ausführungsergebnis

True
1
2
3

Impressionen

In der Skriptsprache können Sie Code schreiben, ohne Typen zu deklarieren. Wenn Sie jedoch nicht genau wissen, welchen Typ und welche Art Sie berühren, treten Probleme auf. Diesmal entspricht dies "Liste". Es war ein Misserfolg aufgrund der hoffnungsvollen Beobachtung von una. Es ist schwierig, alle Inhalte der zu verwendenden Bibliothek zu erfassen, aber ich erkannte erneut, dass die grundlegenden Dinge wie diese Zeit richtig unterdrückt werden sollten.

[^ 1]: Kenji Nakaku: Einführung in Python für Wissenschafts- und Technologieberechnungen, 2016, Technical Review [^ 2]: Ich möchte den Python-Generator viele Male wiederholen

Recommended Posts

[Python] Generatorfunktion
Python-Funktion ①
Python-Funktion ②
Python-Aufzählungsfunktion
Python> Funktion> Schließen
Python> Funktion> Innere Funktion
Python-Funktionsdekorateur
Über Funktionsargumente (Python)
Zusammenfassung der Python-Funktionsargumente
Python-Druckfunktion (Fortsetzung)
Python: Über Funktionsargumente
Timefloor-Funktion (Python)
Zundokokiyoshi (Generator) in Python
Erstellen Sie eine Funktion in Python
Python
[Python] Wert des Funktionsobjekts (?)
2017-04-11 Python> Ich habe Generator ausprobiert> Mir wurde Generatorausdruck / Generatorfunktion / next () beigebracht.
ntile (Dezil) -Funktion in Python
[Python] Der Ursprung des Namens der Python-Funktion
Generator
Über die Aufzählungsfunktion (Python)
Python-URL-Einstellung enthalten Funktion
Python #Funktion 2 für Super-Anfänger
Nichtlineare Funktionsmodellierung in Python
Zeichne die Yin-Funktion in Python
Beispiel für Funktionen höherer Ordnung (Dekoratoren) in Python
Sofortige Funktion (Lüge) in Python
Generator
[Python] Was ist eine Zip-Funktion?
Python-Tapple-Einschlüsse und Generatorausdrücke
[Python] Rückruffunktion (Funktion als Argument übergeben)
Definition des Funktionsargumenttyps in Python
Zufallsgenerator für französische Zahlen mit Python
Unendlicher Primgenerator in Python3
Messen Sie die Ausführungszeit von Funktionen in Python
[Einführung in die Udemy Python3 + -Anwendung] 59. Generator
[Python] Machen Sie die Funktion zu einer Lambda-Funktion
Python #len Funktion für Super-Anfänger
Funktionssynthese und Anwendung in Python
Vorsichtsmaßnahmen beim Erstellen eines Python-Generators
Verwendung der Zip-Funktion von Python
[Python] Unterschied zwischen Funktion und Methode
[Python] Funktionsargumente * (Stern) und ** (Doppelstern)
[OpenCV; Python] Zusammenfassung der Funktion findcontours
Kafka Python
[Einführung in die Udemy Python3 + -Anwendung] 63. Notation zur Einbeziehung des Generators
Python3> Funktionen> Funktionsumbenennungsmechanismus> f = fib
Python-Grundlagen ⑤
Erstellen Sie mit Class einen Python-Funktionsdekorator
Eingebaute Python
Python-Einschlussnotation
Python-Technik
Python studieren
Python 2.7 Countdown
Python-Memorandum
Python FlowFishMaster
Python-Dienst
Verwirklichen Sie den PHP / Python-Generator mit Golang / Ruby