Найти - Пользователи
Полная версия: про декораторы
Начало » Python для новичков » про декораторы
1 2 3
qman
Есть код взятый из http://habrahabr.ru/blogs/python/46306/ :
def empty(f):
return None

@empty
def func(x, y):
return x + y

print func # напечатает: None
Не могу понять, почему при вызове func не указываются переменные x,y?
Подскажите как работает данный код…
P.S. наверно читаю невнимательно….
Александр Кошелев
Простой пример (декорирующая функция возвращает None, в итоге func тоже оказывается равным None)
Вы это осмыслили?
sypper-pit
при обработке должно вывести “”“None”“”
qman
Daevaorn
Простой пример (декорирующая функция возвращает None, в итоге func тоже оказывается равным None)
Вы это осмыслили?
empty() возвращает None понимаю. Но не понимаю, почему func оказывается равным None! Почему?
j2a
декоратор
@empty
def func(x, y):
...
идентичен коду
def func(x, y):
...
func = empty(func)
см PEP 318
qman
вы сократили следующий код:
def empty(f):
return None

def func(x, y):
return x + y

func = empty(func)
print func
?
т.е. определение функции
def func(x, y):
return x + y
даже не нужно? функция func(x, y) не вызывается! а присваивается переменная func !
Верно понимаю?
P.S. извините за тупость. в английском не силён.
qman
j2a
см PEP 318
Спасибо за ссылочку! Кажется начинаю догонять:
@dec2
@dec1
def func(arg1, arg2, ...):
pass
This is equivalent to:
def func(arg1, arg2, ...):
pass
func = dec2(dec1(func))
то есть декоратор создает правила преобразования (из примера dec2 и dec1) результатов функции func?
j2a
qman
то есть декоратор создает правила преобразования (из примера dec2 и dec1) результатов функции func?
не только результатов. Он создает “обертку” вокруг функции, так что можно модифицировать входные и выходные значение, проверять их, делать какие-либо операции в зависимости от действий и прочее.
qman
извините за тупизм
@dec1
def func(arg1, arg2, ...):
pass
dec1 модифицирует входные или выходные значения функции func?
j2a
qman
извините за тупизм
@dec1
def func(arg1, arg2, ...):
pass
dec1 модифицирует входные или выходные значения функции func?
чтобы ответить, нужно видеть код декоратора, потому что он может менять как входные, так и выходные.
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