Декоратор — функция, которая принимает другую функцию и возвращает новую, добавляя поведение без изменения кода исходной функции. Технически он основан на замыкании: внутренняя функция-обёртка «помнит» задекорированную функцию. Синтаксис @decorator над функцией — это сахар для func = decorator(func). Применяют для логирования, замера времени, кеширования, ретраев, проверки прав.