🐍 Функциональный Python: как перестать считать одно и то же по несколько раз
Частый кейс в аналитике: внутри цикла или пайплайна ты раз за разом вызываешь одну и ту же функцию с одинаковыми аргументами. Например, считаешь метрику по сегменту или достаёшь данные из справочника.
Каждый вызов — это заново отработавший расчёт функции.
Но в Python есть декоратор @lru_cache, который кеширует результаты вызовов. Функция считается первый раз, дальше результат берётся из кеша за миллисекунды если аргументы одинаковые.
Нюансы использования: 🔹 Кешируй только чистые функции. Если внутри функции зависит от меняющихся данных, например текущая дата, курс валют в реальном времени, состояние БД — кеш отдаст устаревший результат. 🔹 Списки и словари не хешируются и отдают TypeError, используй кортежи 🔹 Если данные обновляются, сбрасывай кеш: segment_median.cache_clear() в начале нового запуска пайплайна 🔹 Для функций с большим числом комбинаций аргументов ограничивай maxsize, чтобы кеш не съел память
Этот же паттерн работает и в связке с pandas: тяжёлые справочники, расчётные коэффициенты, результаты запросов к API. 👍 если узнал новое