Функциональное программирование на 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 написать — это даже более интересно.

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn



3 коментарі

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

Подожди, а какой-нибудь real-world пример ты можешь привести? А то я как-то не соображу. А так — любой mutable type справляется: class counter: def update (n): ...acc = counter ()

Ну, тут да, есть момент. Хотя я всегда рассматривал вложенный контент как read-only.

насчет нормальной поддержки замыканий ты погорячился

Почему? В моем представлении closure == функция + контекст. Ну так оно есть: >>> def shamba (n): ... def f (): ... print n... return f...>>> g = shamba (42) >>> g () 42

Підписатись на коментарі