Да: запись @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.