Mediumcachefunctools
Что такое @functools.lru_cache?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
@functools.lru_cache — декоратор, кэширующий результаты функции по аргументам (memoization). LRU = Least Recently Used.
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
return n if n < 2 else fib(n - 1) + fib(n - 2)
fib(100) # вычисляет один раз
fib(100) # мгновенно из cache
fib.cache_info()
# CacheInfo(hits=1, misses=101, maxsize=None, currsize=101)
fib.cache_clear()- Аргументы должны быть hashable (immutable);
typed=True—3и3.0считаются разными ключами;@cache(Python 3.9) — alias дляlru_cache(maxsize=None);@cached_property— property с cache;- На method с
self— cache держится до удаления объекта (может течь память при многих instances); - Эффективно для чистых (pure) функций, рекурсии, дорогих вычислений.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.