Декоратор – это обертка вокруг функции, которая определенным образом изменяет ее поведение. Существуют варианты использования декораторов, и вы, возможно, уже применяли их раньше при работе с такими фреймворками, как Flask. Внутри print_argument мы определяем функцию-обертку. Она выводит аргумент и имя вызываемой функции, выполняет фактическую функцию и возвращает ее результат, как если бы функция вызывалась «обычно». С помощью print_argument мы применяем наш декоратор к функции. Декоратор может быть повторно использован и для других функций. Чтобы декоратор принимал параметры, вам нужно поместить слой функций снаружи обычного декоратора.