Уведомления

Группа в Telegram: @pythonsu

#1 Июль 1, 2009 18:50:16

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

про декораторы

j2a
чтобы ответить, нужно видеть код декоратора, потому что он может менять как входные, так и выходные.
например
def empty(f):
return None

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

print func
модифицирует выходное значение функции?



Офлайн

#2 Июль 2, 2009 04:10:26

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

про декораторы

qman
j2a
чтобы ответить, нужно видеть код декоратора, потому что он может менять как входные, так и выходные.
модифицирует выходное значение функции?
нет, он подменяет саму функцию



Офлайн

#3 Июль 2, 2009 08:41:00

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

про декораторы

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
Я тоже не сразу понял, как оно работает. Потратил кучу времени на игру с ними, но так и не нашёл пока реального применения. Хотя, зараза, интересно.



Офлайн

#4 Июль 2, 2009 11:02:43

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

про декораторы

ZZZ
Я тоже не сразу понял, как оно работает. Потратил кучу времени на игру с ними, но так и не нашёл пока реального применения. Хотя, зараза, интересно.
Не нашел применения декораторам? Если интересно, то можно покопаться… с ходу вспоминаются джанговские декораторы @login, @cache и пр.



Офлайн

#5 Июль 2, 2009 11:26:15

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

про декораторы

А мне вот этот нравится: http://code.activestate.com/recipes/576684/



Офлайн

#6 Июль 2, 2009 15:00:37

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

про декораторы

Да нет, это всё замечательно, когда оно уже написано и можно использовать. Как самый частый у меня пример приведу @with_setup из nosetests. Сам написал тучу разных декораторов, типа мемоизации или каста аргументов/ретурна, но всё равно это всё как-то очень редко используется. Но я сильно не переживаю – придёт. :-)



Офлайн

#7 Июль 2, 2009 18:27:09

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

про декораторы

        @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):
...



Офлайн

#8 Июль 3, 2009 06:00:20

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

про декораторы

Оба-на! Какая красотища!
Это Tk? Никогда на нём не писал… А теперь аж интересно стало…



Офлайн

#9 Июль 3, 2009 06:09:08

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

про декораторы

Андрей Светлов
        @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):
...
Мощно!!!



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#10 Июль 3, 2009 17:09:32

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

про декораторы

ZZZ
Нет, это не Tk.
Это вообще python.net и WinForms.
Но декораторы, естественно, самопальные. Там и писать-то нечего, если есть четкое понимание цели.
То же самое легко сделать практически для любого GUI.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version