@Sushkov
">alert("yohoho")

Декораторы в Python?

Непонятна одна вещь в декораторах. Вот самый банальный пример:
def trace(func):
    def inner(*args, **kwards):
        print(func.__name__)
        return func(*args, **kwards)
    return inner

@trace
def main(x):
    print(x)

if __name__ == '__main__':
    main(1)


непонятно как inner получает аргументы декорируемой функции, ведь trace принимает сам объект функции а явной передачи аргументов нет. Как inner получает аргументы?
  • Вопрос задан
  • 309 просмотров
Решения вопроса 1
@lega
Если по простому, то это
@trace
def main(x):
    print(x)

Превращается в вызов функции trace
def original_main(x):
    print(x)

main = trace(original_main)

trace возвращает inner ф-ию в main, в итоге main будет содержать:
def main(*args, **kwards):
    print(func.__name__)
    return original_main(*args, **kwards)

И когда будете вызывать main, все параметры напрямую передадутся в original_main через *args, **kwards
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы