Heim Backend-Entwicklung Python-Tutorial Einführung in die Verwendung rekursiver Aufrufe von Python-Generatoren (Codebeispiel)

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

Nov 24, 2018 pm 04:05 PM

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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Apr 02, 2025 am 07:18 AM

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Apr 02, 2025 am 07:15 AM

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Apr 01, 2025 pm 11:15 PM

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Apr 01, 2025 pm 10:51 PM

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Apr 01, 2025 pm 11:18 PM

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...

Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Apr 02, 2025 am 06:36 AM

Verwenden Sie Python im Linux -Terminal ...

See all articles