Найти - Пользователи
Полная версия: Декораторы. Работа в декорируемой функции
Начало » Python для новичков » Декораторы. Работа в декорируемой функции
1
dissdoc
Доброе утро всем!
Не знаю куда правильно писать - для экспертов или для новичков. Начал изучать декораторы. И вот встал такой вопрос… Вначале покажу самый примитивный код
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? Она не печатает значение… Работает только декоратор?
s0rg
Ну конечно только декоратор - вы же функцию не вызываете. Где у вас вызов func(args)?
dissdoc
Почему же функцию не вызываю? а test(1) - это разве не вызов.. =\
s0rg
В вашем случае - нет, про декораторы внимательно читали?
Что происходит:
test(1) == value_equal(test)(1)
B где вызов test?
Вот например:
if args[0] == 1:
print "Bad"
else:
print "Good"
func(args)
dissdoc
Читал внимательно, но все азы постигаются на практике. Спасибо. Несколько раз перечитывал, уже классы-декоратовы с перегрузкой __call__ стал писать, а на такую мелочь внимание не обратил!
Спасибо еще раз.
s0rg
Не за что )
Вот хорошая статья по теме: http://www.ibm.com/developerworks/ru/library/l-cpdecor/
dissdoc
Ага, кратко и понятно )
А я Марка Лутца прочитал еще. И вот теперь на практике осваиваю. Тоже все доступно описано и разжевано!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB