Форум сайта python.su
Доброе утро всем!
Не знаю куда правильно писать - для экспертов или для новичков. Начал изучать декораторы. И вот встал такой вопрос… Вначале покажу самый примитивный код
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)
Офлайн
Ну конечно только декоратор - вы же функцию не вызываете. Где у вас вызов func(args)?
Офлайн
Почему же функцию не вызываю? а test(1) - это разве не вызов.. =\
Офлайн
В вашем случае - нет, про декораторы внимательно читали?
Что происходит:
test(1) == value_equal(test)(1)
B где вызов test?
Вот например:
if args[0] == 1:
print "Bad"
else:
print "Good"
func(args)
Офлайн
Читал внимательно, но все азы постигаются на практике. Спасибо. Несколько раз перечитывал, уже классы-декоратовы с перегрузкой __call__ стал писать, а на такую мелочь внимание не обратил!
Спасибо еще раз.
Офлайн
Не за что )
Вот хорошая статья по теме: http://www.ibm.com/developerworks/ru/library/l-cpdecor/
Офлайн
Ага, кратко и понятно )
А я Марка Лутца прочитал еще. И вот теперь на практике осваиваю. Тоже все доступно описано и разжевано!
Офлайн