Декоратор — это функция, которая оборачивает другую функцию для добавления поведения без изменения исходного кода. Применяется с синтаксисом @decorator над функцией — чистый способ добавления сквозных проблем (cross-cutting concerns) типа логирования, timing, кэширования или управления доступом.
Как работают декораторы
():
():
()
result = func(*args, **kwargs)
()
result
wrapper
():
()
greet()
