Python Functools LRU_Cache

Python Functools LRU_Cache
Das Functools -Modul von Python befasst sich mit höheren Funktionen oder solchen, die mit Parametern arbeiten (und als Parameter annehmen) oder die anderen aufrufbaren Objekte wie Funktionen zurückgeben. Das Functools -Modul bietet eine Vielzahl von Funktionen, darunter Wraps (Func), LRU_Cache (Func), CMP to Key (Func) und Cached Property (Func). Es ist wichtig zu beachten, dass diese Methoden Parameter akzeptieren, die Funktionen sind. Memoisierung ist eine leistungssteigernde Methode, die von vielen Sprachen verwendet wird, und Python ist keine Ausnahme. Bei der Memoisierung werden die Ergebnisse eines Methodenaufrufs zwischengespeichert.

LRU_Cache, ein von Python bereitgestellter Standardbibliothek -Tool, kann verwendet werden, um dies zu erreichen. Ein Dekorateur namens LRU_Cache () verwendet den Memoisierungsansatz, um die Zeitdauer zu verkürzen, die eine Funktion für dieselben Eingaben ausgeführt wird.

Um die Wirksamkeit des Cache zu untersuchen und das Maxsize -Argument zu optimieren, bietet die verpackte Methode die Methode cache_info (), die ein gekennzeichnetes Tupel erstellt, das Treffer, Fehler, Maxsize und Cursize umfasst. Da LRU_CACHE standardmäßig für jeden Aufruf an die von ihm verkaufte Methode zwischengespeichert wird, kann der Cache weiterhin auf unbestimmte Zeit erweitert werden, während ein Programm ausgeführt wird.

Sie müssen wahrscheinlich nicht besorgt sein, dass der Cache zu groß wird, wenn der Bereich der Argumente, die Ihre Funktion akzeptiert, begrenzt ist (z. B. die einzigen Zahlen 1 bis 100). Um zu verhindern, dass der gesamte Speicher aufgebraucht ist, möchten Sie den Cache möglicherweise unter bestimmten Umständen auf die maximalen X -Möglichkeiten einschränken.
Die "LRU" in LRU_Cache stammt von hier aus. LRU oder am wenigsten verwendet wird ein Begriff, der beschreibt, wie die Objekte im Cache sofort entfernt werden. Alle Daten werden entfernt und für die neuesten X zwischengespeicherten Elementen gespeichert.

Syntax des LRU_cache in Python

Eine solche Funktion des Functools -Moduls, die bei der Verringerung der Funktionsausführungszeit durch Anwendung der Memoisierungstechnik hilft, ist der LRU_Cache (). Das Folgende ist die Syntax des von Python bereitgestellten LRU_Cache:

@lru_cache (maxSize = 128, Typed = false)

Der Dekorateur @lru_cache nimmt zwei Parameter vor:

MAX_SIZE: Die maximale Speicherkapazität des Cache wird durch diese Option angezeigt, wonach die älteren Elemente entfernt werden. Wenn es auf Null gesetzt ist, werden keine Daten aus dem Cache entfernt, was dazu führt, dass sie ewig wachsen. Wenn viele Daten zwischengespeichert werden, führt dies zu Problemen.

Typen: Dieses Argument ist boolescher. Es wird angezeigt, wenn der Wert auf true eingestellt ist.

Beispiel 1: Programm zum Drucken der Fibonacci -Serie

Wie der Name schon sagt, behält der Cache das aktuellste Pairs/Ergebnispaar bei, indem die am wenigsten aktuellen/ältesten Datensätze zuerst eliminiert werden. Mit Hilfe des LRU -Cache drucken wir die Fibonacci -Sequenz. Zum Beispiel ist die einfache Fibonacci -Serie 1, 1, 2, 3, 5, 8 usw. Da 1+1 = 2, 1+2 = 3 usw. Vergleichen wir die Zeiten, in denen die Funktion während der Verwendung des LRU_Cache und der Verwendung von Zeit nicht verwendet wird.

Aus Functools importieren Sie LRU_Cache
Importzeit
Def fib_without_cache (n):
Wenn n < 4:
Rückkehr n
Rückgabe fib_without_cache (n-1) + fib_without_cache (n-4)
Beginnen Sie = Zeit.Zeit()
fib_without_cache (60)
Ende = Zeit.Zeit()
print ("Zeitausführung ohne LRU_Cache ist", End-Begin)
@lru_cache (maxSize = 128)
Def fib_with_cache (n):
Wenn n < 4:
Rückkehr n
Rückgabe fib_with_cache (n-1) + fib_with_cache (n-2)
Beginnen Sie = Zeit.Zeit()
fib_with_cache (60)
Ende = Zeit.Zeit()
print ("Zeitausführung mit LRU_Cache ist", End-Begin)

Hier haben wir aus dem Python Functools -Modul den LRU_Cache importiert. Die Zeit wird auch in diesem Skript für die Zeitausführung importiert. Dann haben wir eine Funktionsdefinition, die den Namen "fib_without_cache" angegeben hat. Die Funktion wurde erstellt, um die Fibonacci -Serie ohne LRU_Cache zu berechnen. In der Funktion mit der IF -Bedingung haben wir die Fibonacci -Serie durch Anwenden ihrer Formel berechnet.

Danach haben wir ein Objekt "Beginn" erstellt, bei dem die Zeitfunktion aufgerufen wird. Die Zeit in Sekunden wird an die Funktion „fib_without_cache“ übergeben. Mit dem Endobjekt haben wir die Zeitausführung beendet. Die Fibonacci -Serie wird vom Print -Befehl ohne LRU_Cache gedruckt. Die Fibonacci -Serie wurde ohne die Funktion LRU_Cache implementiert, wie wir demonstriert haben.

Jetzt stellen wir die Funktion LRU_Cache bereit. Wir setzen den Eingang max_size -Wert auf die Funktion LRU_Cache. Mit dem Dekorator LRU_Cache haben wir dann die Funktion „fib_with_cache“ eingeschlossen. Die Fibonacci -Serie kann sehr schnell bestimmt werden. Die Fibonacci -Serie wird durch Anwendung ihrer Formel bewertet. Die Zeitausführung beginnt mit dem Anfangsobjekt und endet mit dem Endobjekt. Zuletzt haben wir das Ergebnis gedruckt, das mit dem Dekorator LRU_Cache gebildet wird.

Sie können die Ausgabe der Fibonacci -Serie mit und ohne den LRU -Cache -Dekorator wie folgt sehen:

Beispiel 2: Programm zum Zählen des Vokals aus der Zeichenfolge

Wir zählen die Anzahl der Vokale, die die bereitgestellte Zeichenfolge mit dem LRU_Cache Decorator verwendet hat.

Aus Functools importieren Sie LRU_Cache
@lru_cache (maxSize = 50)
Def count_vowels (String):
String = String.Fallfold ()
Rückgabesumme (Zeichenfolge.Graf (Vokal) für Vokal in 'aeiou'))
print (count_vowels ("Hallo Geeks"))

Zuerst haben wir den LRU_Cache in unser Skript aufgenommen und dann den Dekorator LRU_Cache verwendet. Innerhalb des Dekorators LRU_Cache haben wir das Maxsize als Argument übergeben und seinen Wert auf 50 gesetzt. Anschließend haben wir eine Funktion mit dem Namen "count_vowels" erstellt, der die Variable "String" als Eingabe nimmt. Wir setzen die Fallfoldmethode in der String -Variable. Die hier die Fallfoldmethode umwandelt die Zeichen in den in der Zeichenfolge angegebenen unteren Fall.

Dann haben wir den Rückkehrbefehl, der die Summe der in der Zeichenfolge gefundenen Vokale gibt. In der Print -Anweisung haben wir die Zeichenfolge "Hallo Geeks" angegeben.

Das Folgende ist ein ganzzahliger Wert, der die Summe des in der Zeichenfolge gefundenen Vokals ist:

Abschluss

Wir haben den LRU_Cache in Python mit seiner Syntax und Beispielen abgedeckt. Die Ausgabe und die Parameter werden gespeichert, wenn eine im LRU_Cache eingeschlossene Funktion aufgerufen wird. Die Funktion wird dann erneut aufgerufen, und wenn dieselbe Eingabe gefunden wird, wird die Ausgabe aus dem vorherigen Aufruf zurückgegeben, ohne Berechnungen durchzuführen.