Einführung in die Verwendung rekursiver Aufrufe von Python-Generatoren (Codebeispiel)

不言
Freigeben: 2018-11-24 16:05:19
nach vorne
2633 Leute haben es durchsucht

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))
Nach dem Login kopieren

<🎜 denken >Das Ergebnis der Operation:

Wir Nachdem Sie diese Methode kennen, um Werte zu erhalten, werden Sie sich eine andere einfache Möglichkeit mit demselben Prinzip vorstellen, nämlich die for-Schleife

def test():
    print(&#39;=====>1&#39;)
    yield 1
    print(&#39;=====>2&#39;)
    yield 2
    print(&#39;=====>3&#39;)
    yield 3
g = test()
for i in g:
    print(i)
Nach dem Login kopieren

Laufendes Ergebnis:

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)
Nach dem Login kopieren

Laufendes Ergebnis:

Beispiel 3: Log Fehlerüberwachung

import time
def tail(filepath):   #定义一个查看文件的函数
    with open(filepath, &#39;rb&#39;) 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(&#39;utf-8&#39;):  #因为是用二进制读取方式,所以需要解码显示
            print(i.decode(&#39;utf-8&#39;))
grep(&#39;a.txt&#39;, &#39;500&#39;)  #监控a.txt最新日志,并过滤500的错误代码
Nach dem Login kopieren

Sobald 500 erscheint, wird es erfasst

Eine andere Verwendung von Ertrag, Zuordnung

def test(name):
    while True:
        foot = yield
        print(&#39;%s正在吃%s&#39; % (name, foot))

e = test(&#39;轩轩&#39;) #e是生成器
next(e)    #初始化,e.__next__()
# e.send(None)    #初始化,与上一行二选一
e.send(&#39;饺子&#39;)    #发送值传给foot
e.send(&#39;冰激凌&#39;)    #发送值传给foot
Nach dem Login kopieren

Laufende Ergebnisse:

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) + 2

Alter(B) = Alter (C) + 2

Alter(C) = Alter(D) + 2

Alter(D) = Alter(E) + 2

Alter(五) = 0

def num(n):    
if n == 1:        
return 0    
return num(n-1) + 2res = num(5) 
print(res)
Nach dem Login kopieren

Laufergebnis:

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!

Verwandte Etiketten:
Quelle:cnblogs.com
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