Найти - Пользователи
Полная версия: про декораторы
Начало » Python для новичков » про декораторы
1 2 3
qman
j2a
чтобы ответить, нужно видеть код декоратора, потому что он может менять как входные, так и выходные.
например
def empty(f):
return None

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

print func
модифицирует выходное значение функции?
j2a
qman
j2a
чтобы ответить, нужно видеть код декоратора, потому что он может менять как входные, так и выходные.
модифицирует выходное значение функции?
нет, он подменяет саму функцию
ZZZ
qman, попробуй подставить свою функцию в, так сказать, шаблон,приведённый j2a в после №5.

def empty(f):
return None

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

print func
def empty(f):
return None

def func(x, y):
return x + y
func = empty(func) # Что тут вернётся? :-)

print func
Я тоже не сразу понял, как оно работает. Потратил кучу времени на игру с ними, но так и не нашёл пока реального применения. Хотя, зараза, интересно.
j2a
ZZZ
Я тоже не сразу понял, как оно работает. Потратил кучу времени на игру с ними, но так и не нашёл пока реального применения. Хотя, зараза, интересно.
Не нашел применения декораторам? Если интересно, то можно покопаться… с ходу вспоминаются джанговские декораторы @login, @cache и пр.
Ed
А мне вот этот нравится: http://code.activestate.com/recipes/576684/
ZZZ
Да нет, это всё замечательно, когда оно уже написано и можно использовать. Как самый частый у меня пример приведу @with_setup из nosetests. Сам написал тучу разных декораторов, типа мемоизации или каста аргументов/ретурна, но всё равно это всё как-то очень редко используется. Но я сильно не переживаю – придёт. :-)
Андрей Светлов
        @EventHandler(self)(self.panel.exer_asgn_widget.ItemClick)
@with_status(status_bar)
def on_assign_all_click(self, sender, event_args):
....

@combo(on_event(self.panel.expire_widget.ItemClick), status_handler, transacted)
def on_expire_all_click(self, sender, event_args):
...
ZZZ
Оба-на! Какая красотища!
Это Tk? Никогда на нём не писал… А теперь аж интересно стало…
PooH
Андрей Светлов
        @EventHandler(self)(self.panel.exer_asgn_widget.ItemClick)
@with_status(status_bar)
def on_assign_all_click(self, sender, event_args):
....

@combo(on_event(self.panel.expire_widget.ItemClick), status_handler, transacted)
def on_expire_all_click(self, sender, event_args):
...
Мощно!!!
Андрей Светлов
ZZZ
Нет, это не Tk.
Это вообще python.net и WinForms.
Но декораторы, естественно, самопальные. Там и писать-то нечего, если есть четкое понимание цели.
То же самое легко сделать практически для любого GUI.
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