Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 29, 2011 09:58:57

dissdoc
От:
Зарегистрирован: 2009-12-12
Сообщения: 273
Репутация: +  0  -
Профиль   Отправить e-mail  

Декораторы. Работа в декорируемой функции

Доброе утро всем!
Не знаю куда правильно писать - для экспертов или для новичков. Начал изучать декораторы. И вот встал такой вопрос… Вначале покажу самый примитивный код

def value_equal(func):
def wrapper(*args):
if args[0] == 1:
print "Bad"
else:
print "Good"
return wrapper

@value_equal
def test(value):
print value

if __name__ == '__main__':
test(1)
Как заставить работать функцию test? Она не печатает значение… Работает только декоратор?



Офлайн

#2 Сен. 29, 2011 10:30:30

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Декораторы. Работа в декорируемой функции

Ну конечно только декоратор - вы же функцию не вызываете. Где у вас вызов func(args)?

Офлайн

#3 Сен. 29, 2011 11:00:41

dissdoc
От:
Зарегистрирован: 2009-12-12
Сообщения: 273
Репутация: +  0  -
Профиль   Отправить e-mail  

Декораторы. Работа в декорируемой функции

Почему же функцию не вызываю? а test(1) - это разве не вызов.. =\



Офлайн

#4 Сен. 29, 2011 11:12:10

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Декораторы. Работа в декорируемой функции

В вашем случае - нет, про декораторы внимательно читали?
Что происходит:
test(1) == value_equal(test)(1)
B где вызов test?
Вот например:

if args[0] == 1:
print "Bad"
else:
print "Good"
func(args)

Офлайн

#5 Сен. 29, 2011 11:14:20

dissdoc
От:
Зарегистрирован: 2009-12-12
Сообщения: 273
Репутация: +  0  -
Профиль   Отправить e-mail  

Декораторы. Работа в декорируемой функции

Читал внимательно, но все азы постигаются на практике. Спасибо. Несколько раз перечитывал, уже классы-декоратовы с перегрузкой __call__ стал писать, а на такую мелочь внимание не обратил!
Спасибо еще раз.



Офлайн

#6 Сен. 29, 2011 11:27:34

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Декораторы. Работа в декорируемой функции

Не за что )
Вот хорошая статья по теме: http://www.ibm.com/developerworks/ru/library/l-cpdecor/

Офлайн

#7 Сен. 29, 2011 11:35:41

dissdoc
От:
Зарегистрирован: 2009-12-12
Сообщения: 273
Репутация: +  0  -
Профиль   Отправить e-mail  

Декораторы. Работа в декорируемой функции

Ага, кратко и понятно )
А я Марка Лутца прочитал еще. И вот теперь на практике осваиваю. Тоже все доступно описано и разжевано!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version