ݺߣ

ݺߣShare a Scribd company logo
@maxmaxmaxmaxМАКСИМ КЛИМИШИН
CTO GVMachines Inc.
Трансдюсеры
и Python
Обомне
‣ 11+ летопытавебразработки,6летPython
‣ Работалв oDesk,Helios,42cc.
‣ Со-организаторконференцийPyConUkraine,
KyivJS,LvivJS
‣ 3годаработаютехническимдиректоромв
GVMachinesстартапе(onlinegrocerydelivery)
НОВАЯ
КОНЦЕПЦИЯ
ПО РАБОТЕ С
ДАННЫМИ
Rich Hickey
6 августа 2014
добавлено в Clojure
ПОШЛОХОРОШО
Концепциятакхорошопошла,что
сейчасестьреализациидля JavaScript.
Ruby ,Erlang, C++ итакдалее
Ithinkthislibrarywasoriginallydesigned
tofixajavascriptproblem,not aPython
problem.
alcalde, reddit
Гдепригодится
‣ Обработкавсевозможныхвыгрузок(больших
текстовыхданных,преобразованиябольших
json-файлов,json-streaming)
‣ Анализтекста
‣ Любойкодссерьезным анализомили
преобразованиемпоследовательностей
‣ Параллельныевычисления
Мой взгляд
‣ Современемкомпонентовв системе
становится больше,временинаподдержку
этихкомпонентовуходитбольше
‣ Поэтомучитабельностькода ипростотаего
отладкиярассматриваюкакинвестицию,
возможностьтратитьменьшевремени на
поддержку (сейчасиливбудущем)
‣ Ибольшевременитратитьна новыефичи
ИДЕЯ
REDUCE
reduce(reducer,iterable[,initial])
whatever,input ->whatever
reduceболеефундаментальнаяфункция,
чемmapилиfilter.
Спомощьюreduceихлегкореализовать
TransformReducer
функция,которая принимаетредюсер,
преобразуетего ивозвращает новыйредюсер
(whatever,input ->whatever)->(whatever,input->
whatever)
Апочемуэтонадо?
‣ Вложеностьmap/filterтрудночитать(особенно
любителямимперативногокода)
‣ Этоне очень эффективновPython2.Вpython2
послекаждого выполненияmap/filter
создаетсяпромежуточные значения.В python3
естьlazyevaluation
‣ Вложенные[iforiinrange(x)if …]читатьвообще
адово
PiterPy 2015 - Трансдюсеры и Python
iterable
map(f1)
map(f2)
filter(f3)
reducer
sequence
Трансдюсер
2
1
3
Выносимзапределы
обработки
‣ функцию-трансформерилипредикат
‣ функцию-накопительрезультатаобработки
Простейшийтрансдюсерготов!
PiterPy 2015 - Трансдюсеры и Python
Признайтесь,
каждый кэтомуприходил,
втомилииномвиде?
Впитоне уже полно
иснтрументов
‣ itertools
‣ functools
‣ collections
КОМПОЗИЦИЯ
1. Последовательное
прохождение
2. Буферизацияобработки
3. Произвольноепрерывание
1. Буферизация/стриминг
2. Независимость от типа
данныхихранилища
3. Композицияхранилищ
НАКОПЛЕНИЕ
ПРОТОКОЛ
Нужноопределить
протокол
‣ Значениепоумолчаниювзависимостиоттипа
накопителя
‣ Прерываниередукции(earlytermination)
‣ Очисткапослеработы(𲹲Գܱٲٱ)
Используемклассы!
transduce
fizzbuzz
fizzbuzz
PiterPy 2015 - Трансдюсеры и Python
ВЦЕЛОМ
ПОЧЕМУВАЖНО?
чистыефункции
purefunctions
нетпобочныхэффектов
noside-effects
РАЗДЕЛЕНИЕ
ОТВЕТСТВЕННОСТИ
FTW!
MAP, FILTER, REDUCE – 
ЭТО ПРОСТО КРУТО
А ТРАНСДЮСЕРЫ –
ЭТО ОФИГЕННО.
Спасибо!
@maxmaxmaxmax
Ссылочки:
‣ http://blog.cognitect.com/blog/2014/8/6/
transducers-are-coming
‣ http://sixty-north.com/blog/series/
understanding-transducers-through-python
‣ http://www.slideshare.net/alinadolgikh/austin-
bingham-transducers-in-python
‣ https://mathieularose.com/function-composition-
in-python/

More Related Content

PiterPy 2015 - Трансдюсеры и Python