Можно ли создать и применить декоратор без синтаксиса @?

Да: запись @decorator перед функцией эквивалентна присваиванию function = decorator(function) после её определения.

Короткий ответ

Что ответить на собеседовании

Да: запись @decorator перед функцией эквивалентна присваиванию function = decorator(function) после её определения.

Подробный разбор

Ответ с пояснениями

Да: запись @decorator перед функцией эквивалентна присваиванию function = decorator(function) после её определения.

def twice(func):
    def wrapper(*args, **kwargs):
        return 2 * func(*args, **kwargs)
    return wrapper

def value():
    return 3

value = twice(value)
print(value())  # 6

Для двух декораторов @a над @b получается f = a(b(f)). Если декоратор принимает параметры, сначала вызывают фабрику, например f = retry(3)(f). Для сохранения метаданных обёрнутой функции обычно применяют functools.wraps.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее