Dieser Artikel bietet Ihnen eine Einführung in die Verwendung rekursiver Aufrufe von Python-Generatoren (Codebeispiele). Ich hoffe, dass er Ihnen als Referenz dienen wird.
Generator
Was ist ein Generator: Solange das Schlüsselwort yield im Funktionskörper erscheint, wird der Funktionscode nicht ausgeführt, wenn die Funktion ausgeführt wird. und ein Ergebnis wird erhalten. Das Ergebnis ist ein Generator
Ein Generator ist ein Iterator
Die Funktion von yield
yield bietet uns eine Möglichkeit, Iteratorobjekte anzupassen
Der Unterschied zwischen Yield und Return:
1. Yield kann mehrere Werte zurückgeben
2. Die Pause und Wiederaufnahme von Funktionen werden von Yield für uns gespeichert
Solange die Funktion „Yield“ darin enthalten ist, handelt es sich um einen Generator.
Beispiel 1: Wie oben erwähnt: Wenn „Yield“ in der Funktion angezeigt wird, handelt es sich um einen Generator Der Generator ist ein Iterator.
Wenn es um die Iteration geht, sollte der Prozessor an die Wertmethode von xx.__next__()
def test(): print('=====>1') yield 1 print('=====>2') yield 2 print('=====>3') yield 3 g = test() #就相当于一个容器 print(g.__next__()) print(g.__next__()) print(next(g))
def test(): print('=====>1') yield 1 print('=====>2') yield 2 print('=====>3') yield 3 g = test() for i in g: print(i)
Beispiel 2: Das Ergebnis von test1 wird von test2 aufgerufen erfordert die Anpassung eines Generators mit yield
def test1(): for i in range(10): yield i #把0~9变成生成器返回给函数test1 g = test1() #g是个生成器 def test2(g): for i in g: print(i) test2(g)
Beispiel 3: Log Fehlerüberwachung
import time def tail(filepath): #定义一个查看文件的函数 with open(filepath, 'rb') as f: #打开形参为filepath rb是二进制读 f.seek(0,2) #把光标移动到末尾 while True: #循环监控日志 data = f.readline() #读取文件末尾 if data: #加入有数据就用yield返回 yield data else:# 否则就睡眠0.05秒 time.sleep(0.05) def grep(file, k): #定义过滤关键字函数 for i in tail(file): #循环生成器中的数据 if k in i.decode('utf-8'): #因为是用二进制读取方式,所以需要解码显示 print(i.decode('utf-8')) grep('a.txt', '500') #监控a.txt最新日志,并过滤500的错误代码
Eine andere Verwendung von Ertrag, Zuordnung
def test(name): while True: foot = yield print('%s正在吃%s' % (name, foot)) e = test('轩轩') #e是生成器 next(e) #初始化,e.__next__() # e.send(None) #初始化,与上一行二选一 e.send('饺子') #发送值传给foot e.send('冰激凌') #发送值传给foot
Rekursiver Aufruf
Rekursiver Aufruf: Beim Aufrufen einer Funktion wird die Funktion selbst direkt oder indirekt aufgerufen namens rekursiver Aufruf
Die zwei notwendigen Stufen der Rekursion:1 Rekursion, 2 Backtracking
Beispiel: A, B, C, D und V, 5 Personen essen Brötchen. A sagte, es sei besser als B. B sagte, er habe 2 Stücke mehr als C gegessen . Ding sagte, er habe zwei Stücke mehr gegessen als E. E sagte, er habe es nicht gegessen, weil er wusste, dass E es nicht gegessen hatte, also basierend auf den Antworten von A, B, C und D, wir wissen, dass A 8 gegessen hat, also ist der Prozess des Hin- und Hergehens eine Rekursion und ein Zurückverfolgen Alter(A) = Alter(B) + 2Alter(B) = Alter (C) + 2Alter(C) = Alter(D) + 2Alter(D) = Alter(E) + 2Alter(五) = 0def num(n): if n == 1: return 0 return num(n-1) + 2res = num(5) print(res)
Das obige ist der detaillierte Inhalt vonEinführung in die Verwendung rekursiver Aufrufe von Python-Generatoren (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!