Dieser Artikel stellt hauptsächlich die relevanten Informationen zur Verwendung von Funktionen höherer Ordnung zur Implementierung von Bereinigungsfunktionen vor. Ich hoffe, dass er allen helfen kann.
Fall:
Manchmal möchten wir bestimmte Funktionen zu mehreren Funktionen hinzufügen, z. B. Zeitstatistiken, Protokollierung, Cache-Vorgangsergebnisse usw.
Anforderungen:
Es ist nicht erforderlich, in jeder Funktion genau den gleichen Code hinzuzufügen
Wie löst man das Problem?
Extrahieren Sie denselben Code und definieren Sie ihn als Dekorator.
Suchen Sie die Fibonacci-Folge (Goldene-Schnitt-Folge). Beginnen Sie mit dem dritten Element der Sequenz. Jedes Element ist gleich Summe der ersten beiden Begriffe
Finden Sie eine Treppe mit insgesamt 10 Stufen. Von unten nach oben können Sie jeweils nur 1 bis 3 Stufen zurücklegen, und Sie können nicht zurückgehen Möglichkeiten gibt es?
Logische Anordnung des Steps-Up-Problems:
Jeder Schritt besteht aus 1~3 Schritten und die restlichen Schritte sind 7~9 Schritte
Wenn Wenn Sie 1 Schritt machen, müssen Sie die Schritte für die nächsten 9 Schritte finden
Wenn Sie 2 Schritte machen, müssen Sie die Schritte für die nächsten 8 Schritte finden
Wenn Sie 3 Schritte machen Schritte, Sie müssen die Schritte für die nächsten 7 Schritte finden
Diese 3 Wege werden durch Rekursion realisiert. Die Rekursion ist wie ein Baum. Jede Rekursion generiert untergeordnete Knotenfunktionen
oder höher . Wenn die beiden Probleme durch Rekursion gelöst werden, entsteht ein Problem, ein wiederholtes Lösungsproblem, und der wiederholte Lösungsprozess wird eliminiert. In der C++-Sprache wird dies als Beschneidungsfunktion bezeichnet
#!/usr/bin/python3 def jian_zhi(func): # 中间字典,判断已经是否求解过 median = {} def wrap(*args): # 假如不在中间字典中,说明没有求解过,添加到字典中去,在的话,直接返回 if args not in median: median[args] = func(*args) return median[args] return wrap @jian_zhi def fibonacci(n): if n <= 1: return 1 return fibonacci(n-1) + fibonacci(n-2) @jian_zhi def climb(n, steps): count = 0 # 当最后台阶为0的时候,说明最后只是走了一次 if n == 0: count = 1 # 当最后台阶不为0的时候,说明还需要走至少一次 elif n > 0: # 对三种情况进行分别处理momo for step in steps: count += climb(n-step, steps) # 返回每次递归的计数 return count if __name__ == '__main__': print(climb(10, (1, 2, 3))) print(fibonacci(20))
Die sogenannte Pruning-Funktion dient lediglich dazu, die Einzigartigkeit jeder Rekursionsfunktion sicherzustellen. Sie verwendet ein Zwischenwörterbuch zum Speichern der ausgeführten Funktionen und Parameter und eliminiert wiederholte Funktionsaufrufe durch Beurteilung der Parameter .
Das obige ist der detaillierte Inhalt vonSo implementieren Sie Bereinigungsfunktionen mithilfe von Funktionen höherer Ordnung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!