SobesLab логотип SobesLab

Ответ

Если написать @decorator над функцией, то используется существующий декоратор (функция или объект, принимающий функцию). Если же написать @decorator(...), то сначала вызовется decorator как функция с указанными аргументами, и должен вернуть декоратор, который потом применится к функции. Таким образом, @decorator – простое применение, а @decorator(params) – применение декоратора-фабрики (то есть декоратора, который сам параметризуется аргументами). Пример: @lru_cache(maxsize=100) – вызывается lru_cache с аргументом, возвращая конкретный декоратор.