Функциональное программирование на Python
Несмотря на изначально убогую форму ламбда-функций а затем и deprecation типичных функционалов map, filter, reduce функциональное программирование на Python развивается и довольно успешно. Может быть потому, что функции с самого начала были first-class citizens.
Про list comprehensions уже наверное все слышали, как и про нормальную поддержку замыканий (closures). Сюда же можно отнести и декораторы, появившиеся в 2.4 и являющиеся, по сути, средством создания замыканий вокруг объектов-функций.
Библиотечные модули тоже развиваются, в Python 2.3 появился itertools (я им, правда никогда не пользовался), а в 2.5 обещают partial function application. Выглядеть это будет так:
def log (level, message, subsystem):
print ’%s: %s’ % (subsystem, message, level)
...server_log = partial(log, subsystem=’server’)
debug = partial(log, DEBUG)server_log(INFO, ’test message’)
debug(’another test’, ’ui’)
Функция partial, кстати, получила отдельный библиотечный модуль — functional, так что далі буде. ;-)
P.S.: Конечно, partial имеет мало общего (за исключением внешнего сходства) с function currying из ФП, но все равно забавно. Надо бы еще о generic dispatch написать — это даже более интересно.
3 коментарі
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.