Heim >Backend-Entwicklung >Python-Tutorial >Rekursion und Generator der Python-Funktion
1. Was ist Rekursion
Wenn eine Funktion einen Aufruf an sich selbst enthält, ist die Funktion rekursiv. Als Algorithmus wird in Programmiersprachen häufig ein großes und komplexes Problem in ein kleineres Problem umgewandelt, das dem ursprünglichen Problem ähnelt. Die rekursive Strategie kann mit nur wenigen Programmen beschrieben werden Die zur Lösung des Problems erforderlichen Codes reduzieren die Codemenge im Programm erheblich. Um beispielsweise das Produkt von 9-stelligen Zahlen von 1 bis 9 zu berechnen, lautet der intuitive Algorithmus 1*2*3*4*5*6*7*8*9. Wenn Sie das Produkt von 1-10000 berechnen möchten Der intuitive Algorithmus ist schwierig zu implementieren und die Rekursion kann leicht implementiert werden. Bitte sehen Sie sich das Beispiel an:
def fact(n):#计算给定数字到一的乘积 if n<=1: return 1 else: return n * fact(n-1) print (fact(7))
Das Ergebnis ist: 5040
Lassen Sie uns den rekursiven Ausführungsprozess anhand eines Beispiels sehen :
def calc(n): print(n) if n/2 > 1: res = calc(n/2) return n calc(8)
Das Ergebnis ist:
8 4.0 2.0
Sehen Sie sich dieses Beispiel noch einmal an:
def calc(n): print(n) if n/2 > 1: res = calc(n/2) print('res:',res) print("N:",n) return n calc(8)
Das Ergebnis ist:
8 4.0 2.0 N: 2.0 res: 2.0 N: 4.0 res: 4.0 N: 8
2. Generator
Der Generator ist ein Generator mit eine Ertragsaussagefunktion. Eine Funktion oder Unterroutine kehrt nur einmal zurück, aber ein Generator kann die Ausführung anhalten und ein Zwischenergebnis zurückgeben, einen Wert an den Aufrufer zurückgeben und die Ausführung anhalten. Wenn die next()-Methode des Generators aufgerufen wird, wird sie genau dort fortgesetzt, wo sie aufgehört hat
Sehen Sie sich das folgende Beispiel an:
def func(): print('11111111') yield [1] print(2222222222) yield 2 print(3333333333) yield 3 ret=func() r1=ret.__next__() print(r1) r2=ret.__next__() print(r2) r3=ret.__next__() print(r3)
Das Ergebnis ist:
11111111 [1] 2222222222 2 3333333333 3
Da die for-Schleife von Python einen next()-Aufruf und die Verarbeitung von StopIteration hat, verwenden Sie ein A for Schleife anstelle der manuellen Iteration durch einen Generator (oder Iterator dieser Sache) ist immer viel sauberer und hübscher. Beispiel:
def func(): print('11111111') yield [1] print(2222222222) yield 2 print(3333333333) yield 3 ret=func() for i in ret: print(i)
Das Ergebnis ist das gleiche wie zuvor.
Diese einfachen Beispiele sollen Ihnen eine kleine Vorstellung davon geben, wie Generatoren funktionieren. Zusätzlich zu next() zum Abrufen des nächsten generierten Werts können Benutzer Werte an den Generator zurücksenden [send()], Ausnahmen im Generator auslösen und den Generator zum Beenden auffordern [close()]
Nachfolgend finden Sie ein einfaches Beispiel, das diese Funktionen demonstriert.
def counter(start_at=0): count = start_at while True: val = (yield count) if val is not None: count = val else: count += 1
Der Generator verfügt über einen Anfangswert, der bei jedem Aufruf des Generators [next()] um 1 hochgezählt wird. Benutzer haben die Möglichkeit, diesen Wert zurückzusetzen, wenn sie wirklich send() mit dem neuen Wert aufrufen möchten, anstatt next() aufzurufen. Dieser Generator läuft ewig. Wenn Sie ihn also beenden möchten, rufen Sie die Methode close() auf. Wenn wir diesen Code interaktiv ausführen, erhalten wir die folgende Ausgabe:
>>> count = counter(5) >>> count.next() 5 >>> count.next() 6 >>> count.send(9) 9 >>> count.next() 10 >>> count.close() >>> count.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
Der obige Artikel befasst sich mit einem detaillierten Verständnis der Rekursion und Generatoren von Python-Funktionen Ich habe Ihnen den gesamten Inhalt gegeben, ich hoffe, dass er Ihnen eine Referenz geben kann, und ich hoffe, dass Sie die chinesische PHP-Website unterstützen.
Weitere Artikel zum Thema Rekursion und Generatoren von Python-Funktionen finden Sie auf der chinesischen PHP-Website!