Задать вопрос
BelBES
@BelBES

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

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

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

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


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

print (bar)

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

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

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

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


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

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
02 февр. 2025, в 00:55
2500 руб./за проект
02 февр. 2025, в 00:25
5000 руб./за проект
02 февр. 2025, в 00:18
1000 руб./за проект