So implementieren Sie Bereinigungsfunktionen mithilfe von Funktionen höherer Ordnung in Python

小云云
Freigeben: 2018-03-29 14:30:27
Original
2086 Leute haben es durchsucht

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__ == &#39;__main__&#39;:
  print(climb(10, (1, 2, 3)))
  print(fibonacci(20))
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
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