tg-me.com/pyproglib/6620
Last Update:
lru_cache
— декоратор для кеширования результатов функций. Повторные вызовы с теми же аргументами не вычисляются заново — это ускоряет код в разы.
Пример:
from functools import lru_cache
@lru_cache(maxsize=128)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(30)) # Выводит: 832040
print(fibonacci.cache_info()) # Статистика кеша
С
lru_cache
результаты сохраняются в кеше и повторно используются, что ускоряет выполнение.— Рекурсивные функции
— Повторяющиеся запросы к базе данных
— Повторные API-запросы
Пример:
import requests
from functools import lru_cache
@lru_cache(maxsize=32)
def get_weather(city):
response = requests.get(f"https://api.weather.com/data?city={city}")
return response.json()
print(get_weather("New York")) # Первый вызов
print(get_weather("New York")) # Кешированный ответ
lru_cache
lru_cache
хранит результаты в словаре и отслеживает порядок использования через двусвязный список. Когда кеш переполнен, удаляется наименее недавно использованный элемент.Параметр
maxsize
позволяет регулировать размер кеша:— None — неограниченный размер кеша
— Число — ограничение на количество записей в кеше
Пример:
@lru_cache(maxsize=256)
def expensive_computation(x, y):
return x * x + y * y
Все аргументы функции должны быть хешируемыми. Если функция использует изменяемые типы, их нужно преобразовать в неизменяемые.
Пример:
@lru_cache(maxsize=32)
def process_data(data_tuple):
return sum(data_tuple)
data = [1, 2, 3, 4]
print(process_data(tuple(data))) # Преобразуем список в кортеж
Для этого можно использовать метод
cache_clear()
.Пример:
expensive_computation.cache_clear()
— Ускорение работы функций
— Легкость внедрения с
@lru_cache
— Поддерживает статистику
— Возможен рост потребления памяти при maxsize=None
— Поддерживаются только хешируемые аргументы
Библиотека питониста #буст