Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2011-10-05

Декораторы


Прекрасная (хотя и тяжеловата для неподготовленного читателя) статья про декораторы в Python:

У декораторов есть общая черта с более ранними метапрограммными абстракциями, введенными в Python: они в действительности не делают ничего, что нельзя было бы сделать и без них.
...
Будучи просто синтаксической изюминкой, декораторы позволяют легко делать глупости, если вам этого хочется. Декоратор – это просто функция, принимающая как минимум один аргумент. Это программист, использующий декоратор, должен удостовериться, что возвращаемая величина является все еще осмысленной функцией или методом ...
...
Вероятнее всего, самое типичное применение декораторов, с которым вам придется сталкиваться – это оснащение функции или метода какими-либо дополнительными функциями вдобавок к их основному назначению. Например, на Web-сайте Python Cookbook (см. ссылку в разделе Ресурсы) и в других подобных местах можно встретить декораторы, добавляющие такие возможности, как трассировка, ведение журнала, запоминание/кэширование, блокировка потоков, перенаправление вывода. Сходны с такими модификациями, хотя и немного в другом духе, модификации "до" и "после". Одно интересное применение "до/после"-декорирования – это проверка типов аргументов и возвращаемого значения функции. Предполагается, что подобный декоратор type_check() должен вызвать исключение или предпринять какие-нибудь корректирующие действия, если типы не те, которые ожидаются.

ibm.com/developerworks/ru/library/l-cpdecor
ibm.com/developerworks/linux/library/l-cpdecor

А знаете ли вы, что декораторы приближают нас к AOP?

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) Klaipeda (13) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)