Heim >Backend-Entwicklung >Python-Tutorial >Generatorertrag in Python
Generator-Ertrag: Mithilfe der Yield-Anweisung
kann die Funktion eine Folge von Ergebnissen anstelle nur eines Werts generieren
def countdow(n): print("Start!"); while n>0: yield n; n -= 1; c = countdow(5); print(c.__next__()) print(c.__next__())
Ausgabeergebnis:
Start! 5 4
Die Methode __next__() bewirkt, dass die Generatorfunktion bis zur nächsten yield-Anweisung ausgeführt wird. Zu diesem Zeitpunkt übergibt die Methode __next__() den Rückgabewert an yield und die Funktion unterbricht die Ausführung vorübergehend Der Prozess wird fortgesetzt, bis die Generatorfunktion zum Ende zurückkehrt
Normalerweise wird die __next__()-Methode nicht manuell aufgerufen
, sondern es wird eine Schleife verwendet
for i in countdow(5): print(i);Ausgabeergebnis:
5 4 3 2 1Generator ist eine leistungsstarke Möglichkeit, Programme basierend auf der Verarbeitung von Pipelines, Streams oder Datenflüssen zu schreiben
Zum Beispiel:
def tail(f): for line in f: if not line : #如果 非真 则暂时休眠并且再次尝试 time.sleep(0.1); continue; yield line; # 将获取到的文件中的值 生成一个序列的值 filecount = tail(open('E:/work.txt')); #grep方法 用于在上面方法生成器中查找特定的子字符串 def grep(lines,searchtext): for line in lines: if searchtext in line : yield line; lines = grep(filecount,'tom'); #查找带有tom 的子字符串 for line in lines: print(line);Ausgabeergebnis:
'tom',120,132
Zusammenfassung:
Die Rolle des Generators: Wenn das Programm nach Yield ausgeführt wird, wird der laufende Wert
an Yield übergeben Das Programm befindet sich zu diesem Zeitpunkt in einem angehaltenen Zustand. Bei Verwendung der Methode __next__() Wenn die Funktion so lange ausgeführt wird, bis sie erneut auf yield trifft
Vorteile: yield speichert keinen einzelnen Wert, sondern den Aktueller Programmausführungsstatus, anstatt alle Elemente auf einmal zu berechnen, um Speicherplatz zu sparen
Das Obige ist der Inhalt des Generatorertrags in Python. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!