LRU_CACHE, standardowe narzędzie biblioteczne dostarczone przez Pythona, może być użyte do osiągnięcia tego. Dekorator o nazwie LRU_Cache () wykorzystuje podejście memoizacyjne, aby skrócić czas, w którym funkcja jest wykonywana dla tych samych wejść.
Aby zbadać skuteczność pamięci podręcznej i zoptymalizować argument MaxSize, metoda zapakowanej oferuje metodę CACHE_INFO (), która tworzy znakowane krotki zawierające hity, awarie, maxSize i currSize. Ponieważ domyślnie LRU_Cache do buforowania każdego wywołania do metody, którą zawiera, pamięć podręczna może nadal rozszerzać się w nieskończoność.
Prawdopodobnie nie musisz martwić się o to, że pamięć podręczna staje się zbyt duża, jeśli zakres argumentów, które akceptuje Twoja funkcja, jest ograniczony (na przykład jedyne liczby od 1 do 100). Aby zapobiec zużyciu całej pamięci, możesz ograniczyć pamięć podręczną w niektórych okolicznościach do maksymalnych możliwości.
Stąd pochodzi „LRU” w LRU_Cache. LRU lub najmniej często używane jest termin używany do opisania, w jaki sposób obiekty w pamięci podręcznej są natychmiast usuwane. Wszystkie dane są usuwane i zapisywane dla najnowszych elementów pamięci podręcznej X.
Składnia LRU_Cache w Pythonie
Jedną z takich funkcji modułu FunCools, która pomaga w skróceniu czasu wykonywania funkcji poprzez zastosowanie techniki memoizizacji, jest LRU_CACHE (). Poniżej znajduje się składnia LRU_Cache dostarczona przez Pythona:
@lru_cache (maxSize = 128, typed = false)
Dekorator @lru_cache przyjmuje dwa parametry:
Max_Size: maksymalna pojemność pamięci pamięci podręcznej jest wskazana przez tę opcję, po której starsze elementy są usuwane. Gdy zostanie ustawiony na zero, żadne dane nigdy nie zostaną usunięte z pamięci podręcznej, co powoduje, że rośnie wiecznie. Jeśli wiele danych zostanie buforowanych, spowoduje to problemy.
Rodzaje: Ten argument jest boolean. Posiadanie różnych wpisów w pamięci podręcznej dla różnych rodzajów parametrów funkcji jest wskazane, gdy wartość jest ustawiona na true.
Przykład 1: Program do wydrukowania serii Fibonacci
Jak sama nazwa wskazuje, pamięć podręczna utrzymuje najbardziej aktualną parę wejść/wyników, eliminując najpierw najnowsze/najstarsze rekordy. Za pomocą pamięci podręcznej LRU wydrukujemy sekwencję Fibonacciego. Na przykład prosta seria Fibonacci to 1, 1, 2, 3, 5, 8 itp. od 1+1 = 2, 1+2 = 3 i tak dalej. Porównajmy czasy, które funkcja podejmuje podczas korzystania z LRU_Cache, a kiedy nie jest używana do używania czasu.
z Functools import lru_cacheTutaj, z modułu Python Functools, zaimportowaliśmy LRU_Cache. Czas jest również importowany do tego skryptu dla wykonania czasu. Następnie mamy definicję funkcji, która nadała nazwę „fib_without_cache”. Funkcja została utworzona w celu obliczenia serii Fibonacciego bez LRU_Cache. Wewnątrz funkcji z warunkiem IF, obliczyliśmy serię Fibonacciego, stosując jej formułę.
Następnie stworzyliśmy obiekt „zacznij”, w którym wywoływana jest funkcja czasu. Czas w sekundach jest przekazywany do funkcji „fib_without_cache”. Z obiektem końcowym zakończyliśmy wykonanie czasu. Seria Fibonacciego jest drukowana bez LRU_Cache przez polecenie drukowania. Seria Fibonacciego została zaimplementowana bez funkcji LRU_CACHE, jak pokazaliśmy.
Teraz wdrażamy funkcję LRU_CACHE. Ustawiamy wartość wejścia max_size na funkcję LRU_CACHE. Korzystając z dekoratora LRU_CACHE, następnie owinęliśmy funkcję „fib_with_cache”. Serię Fibonacciego można bardzo szybko ustalić, robiąc. Seria Fibonacciego jest oceniana przez zastosowanie jej formuły. Wykonanie czasu rozpoczyna się od obiektu początkowego, a kończy się obiektem końcowym. Na koniec wydrukowaliśmy wynik utworzony z dekoratorem LRU_CACHE.
Możesz zobaczyć wyjście serii Fibonacciego z dekoratorem pamięci podręcznej LRU i bez nich w następujący sposób:
Przykład 2: Program policz samogłoskę z ciągu
Policzamy liczbę samogłosek, jaki ma podany ciąg, wykorzystując dekorator LRU_CACHE.
z Functools import lru_cacheNajpierw dołączyliśmy LRU_Cache w naszym skrypcie, a następnie użyliśmy dekoratora LRU_CACHE. Wewnątrz dekoratora LRU_CACHE przekazaliśmy MaxSize jako argument i ustawiliśmy jego wartość na 50. Następnie utworzyliśmy funkcję o nazwie „count_vowels”, która przyjmuje zmienną „ciąg” jako wejście. Ustawiamy metodę CaseFold w zmiennej string. Metoda casefold tutaj przekształca znaki w dolną sprawę podaną w ciągu.
Następnie mamy polecenie powrotu, które podaje sumę samogłosek znalezionych w ciągu. Do instrukcji drukowania określliśmy ciąg „Hello Geeks”.
Poniżej znajduje się wartość liczb całkowita, która jest sumą samogłoski znalezionej w ciągu:
Wniosek
Omówiliśmy LRU_Cache w Pythonie jego składnią i przykładami. Wyjście i parametry są zapisywane, gdy wywoływana jest funkcja zamknięta w LRU_Cache. Funkcja jest następnie wywoływana ponownie, a jeśli znaleziono to samo wejście, dane wyjściowe z poprzedniego połączenia są zwracane bez wykonywania jakichkolwiek obliczeń.