Что выведет код Middle Декораторы обновлено

Статистика lru_cache

Вопрос

Что выведет код? По строке на каждый print.

from functools import lru_cache

@lru_cache(maxsize=2)
def sq(x):
    print('calc', x)
    return x * x

sq(1); sq(2); sq(1); sq(3); sq(2)
print(sq.cache_info().hits, sq.cache_info().misses)

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: calc 1, calc 2, calc 3, calc 2, 1 4. sq(1) и sq(2) промахи. sq(1) попадание и делает 1 самым свежим. sq(3) промах, кеш на 2 элемента вытесняет самый давний, это 2.

Что выведет

calc 1
calc 2
calc 3
calc 2
1 4

Разбор

sq(1) и sq(2) промахи. sq(1) попадание и делает 1 самым свежим. sq(3) промах, кеш на 2 элемента вытесняет самый давний, это 2. Поэтому последний sq(2) снова считается. Итого 1 попадание и 4 промаха.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.