BelBES
@BelBES

Почему декоратор в python вызывается при старте скрипта?

Обнаружил странное поведение в python3.5.
Пишем тупой код с декоратором:

def foo(f):
    print("foo")
    f()

@foo
def bar():
    print("bar")


И теперь при попытке запустить скрипт, содержащий только эти строки, он вызывает декорируемую функцию, а если попытаться сделать еще что-то такое:

print (bar)

То сначала вновь вызовется декорируемая функия, а после выведется None.

Мне казалось, что декораторы - это синтаксический сахар в python и по идее должен только при вызове функции bar подменять этот вызов на foo(bar). Я что-то не правильно понимаю, или это косяк в python?
  • Вопрос задан
  • 272 просмотра
Решения вопроса 1
@deliro
это синтаксический сахар в python и по идее должен только при вызове функции bar подменять этот вызов на foo(bar)

Странная причинно-следственная связь.
Да, сахар. И код
@foo
def bar():
    print("bar")

равносилен
def bar():
    print("bar")
bar = foo(bar)


Стало понятней?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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