Кэширование функций
Кэширование функций позволяет кэшировать возвращаемые значения функций в зависимости от аргументов. Это может помочь сэкономить время при работе с вводом/выводом на повторяющихся данных. До Python 3.2 мы должны были бы написать собственную реализацию. В Python 3.2+ появился декоратор lru_cache
, который позволяет быстро кэшировать возвращаемые функцией значения.
Давайте посмотрим, как мы можем воспользоваться кэшированием в Python 3.2+ и в более старых версиях.
Python 3.2+
Реализуем функцию расчета n-ого числа Фибоначчи с использованием lru_cache
:
Аргумент maxsize
сообщает lru_cache
сколько последних значений запоминать.
Мы также можем легко очистить кэш:
Python 2+
В старых версиях языка также есть несколько путей достижения схожего эффекта. Вы можете сами реализовать любой тип кэширования. Это зависит только от ваших потребностей. Вот базовое решение:
Примечание: memoize
не сможет кэшировать типы данных, которые нельзя хешировать (словари, списки и т.д.). Только объекты неизменяемых типов подлежат кэшированию. Держите это в уме при использовании декоратора.
Отличная статья от Caktus Group, в которой они рассказывают историю бага в Django, который появился из-за lru_cache
. Рекомендую к ознакомлению.
Last updated