Практикум 16 — шесть задач на декораторы: обрезка строк, параметризованные декораторы, кэширование, LRU-кэш, логирование вызовов и проверка типов аргументов.
Декоратор без параметров: @limit_output.
Декоратор с параметрами: @limit_output(26).
Кэширование через словарь в замыкании.
Ограниченный кэш на OrderedDict с вытеснением старых записей.
Логирование вызовов в файл через модуль logging.
Проверка позиционных аргументов через isinstance.
Что запомнить: декораторы — это замыкания, которые оборачивают функции; параметризованные декораторы требуют тройной вложенности.
О чём этот урок
Это шестнадцатый практикум курса. Все задания посвящены декораторам — функциям высшего порядка, которые добавляют поведение перед или после вызова целевой функции. Внутри каждого декоратора используется замыкание, поэтому урок продолжает тему урока 64.
Что повторим и закрепим
Простой декоратор без параметров: функция принимает функцию и возвращает обёртку.
Параметризованный декоратор: фабрика, которая сначала получает аргументы, а потом — декорируемую функцию.
Сохранение состояния в замыкании: словари для кэша, счётчики, накопители.
Работа с аргументами через *args и **kwargs.
Логирование через стандартный модуль logging.
Проверка типов через isinstance и генерация TypeError.
Современные практики: аннотации типов, f-strings, именование по PEP 8, guard clauses.