[#] [Из песочницы] Псевдопрактический пример замыканий и декораторов
habrabot(difrex,1) — All
2014-11-24 14:30:03


Когда я только начинал изучать Python, большое впечатление на меня произвели route-декораторы в известном фреймворке flask. Конечно, я догадывался, как они могли быть реализованы, но как всегда желание писать (а не читать) превзошло необходимость взглянуть на исходный код flask, и мне пришлось выдумать то, что могло бы выглядеть так же лапидарно, как вышеупомянутые декораторы из flask'а. Упражнение на тему замыканий, декораторов и области видимости в Python могло бы выглядеть так:

def do_something(p):
return p

@implements(do_something, lambda: not p % 2)
def do_mod2_something(p):
return p / 2

@implements(do_something, lambda: not p % 3)
def do_mod3_something(p):
return p / 3

do_something(10) # returns 5
do_something(9) # returns 3
do_something(11) # returns 11


Как реализовать декоратор @implements? Может ли подобная реализация использоваться где-то в реальных проектах — вопрос, который мы редко принимаем во внимание, выдумывая себе упражнения для понимания того, как работают те или иные программы. Мне показалось, что это выглядит как некое замещение (override) функции, имеющее место в других языках программирования. [Читать дальше →][1]

[1]: http://habrahabr.ru/post/244017/#habracut