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.
Ü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.
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.
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
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