SlideShare 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)
‣ Очисткапослеработы(cleanupstate)
Используемклассы!
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

PDF
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
PPTX
Continuous Integration для C++ разработчика
PPTX
Continuous Integration for C++ engineers
PPSX
SOA: послать запрос на сервер? Что может быть проще?!
PDF
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
PDF
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
PDF
Around the Gulp — Андрей Яманов — MoscowJS 13
PPSX
Мониторинг, когда не тестируешь
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
Continuous Integration для C++ разработчика
Continuous Integration for C++ engineers
SOA: послать запрос на сервер? Что может быть проще?!
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Around the Gulp — Андрей Яманов — MoscowJS 13
Мониторинг, когда не тестируешь

What's hot (20)

PDF
React.js: Ускоряем UX/UI
PDF
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
PDF
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
PPTX
Великий и могучий C++
PDF
Onliner development workflow
PDF
Rust - GDG DevFest Siberia 2016
PDF
Rambler.iOS #6: Не рычите на pbxproj
PDF
Данил Ильиных и Владимир Иванов, «Велогосипед»
PPTX
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
PDF
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
PDF
DevOps или искусство выживания в растущей компании
PDF
Как ВКонтакте использует Go
PDF
Андрей Лузин
PDF
Benchmarking PostgreSQL in Linux and FreeBSD
PDF
On Docker
PDF
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
PDF
Gdg создание telegram бота с использованием google сервисов без денег
PDF
Артем Титаренко
PDF
5 мифов о производительности баз данных и Python
PDF
Docker integration into Badoo
React.js: Ускоряем UX/UI
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Великий и могучий C++
Onliner development workflow
Rust - GDG DevFest Siberia 2016
Rambler.iOS #6: Не рычите на pbxproj
Данил Ильиных и Владимир Иванов, «Велогосипед»
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DevOps или искусство выживания в растущей компании
Как ВКонтакте использует Go
Андрей Лузин
Benchmarking PostgreSQL in Linux and FreeBSD
On Docker
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
Gdg создание telegram бота с использованием google сервисов без денег
Артем Титаренко
5 мифов о производительности баз данных и Python
Docker integration into Badoo
Ad

Viewers also liked (8)

PDF
JSLab. Максим Климишин. "Трансдюсеры, CSP каналы, неизменяемые структуры данных"
PDF
Валкин, Мокевнин — Развитие IT-среды в Ульяновске
ODP
Транзакционная память (on Russian)
PPT
Александр Жарков — Эволюция команды разработки: взгляд изнутри
PDF
Emacs: многофункциональный комбайн
PPTX
FlatGUI: Reactive GUI Toolkit Implemented in Clojure
PDF
Clojure #2 (2014)
PDF
JSLab. Максим Климишин. "Трансдюсеры, CSP каналы, неизменяемые структуры данных"
Валкин, Мокевнин — Развитие IT-среды в Ульяновске
Транзакционная память (on Russian)
Александр Жарков — Эволюция команды разработки: взгляд изнутри
Emacs: многофункциональный комбайн
FlatGUI: Reactive GUI Toolkit Implemented in Clojure
Clojure #2 (2014)
Ad

Similar to PiterPy 2015 - Трансдюсеры и Python (20)

PDF
JS Lab`16. Максим Климишин: "Smarter React.js: UI faster, UX better"
PDF
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
PPTX
DevOps для 1С
PDF
Технологии больших веб проектов завтра и послезавтра
PDF
Инновации и JavaScript
PPSX
CodeFest 2014. Круглов И. — События на каждом углу. Путешествие в мир системн...
PDF
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
PDF
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
PPTX
Евгений Куршев, Яндекс.Метрика вместо сериалов: анализируем поведение пользов...
PDF
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
PDF
"Девопс - это не только для программистов. Практические примеры из жизни одно...
PDF
Денис Чистяков — JavaScript на фронте и в тылу
PDF
Программируемость коммутаторов для ЦОД Cisco Nexus
PDF
«Новый 2ГИС Online» — Влад Семенов, 2ГИС
PPTX
Php and frameworks
PDF
Андрей Сибирёв "Ваше собственное облако — война за независимость"
PDF
От заката до рассвета | Максим Безуглый | Zlit Tech
PPTX
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
ODP
Tech Success: Web/2.0 startup HOWTO
ODP
Tech Success: Web/2.0 startup HOWTO
JS Lab`16. Максим Климишин: "Smarter React.js: UI faster, UX better"
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
DevOps для 1С
Технологии больших веб проектов завтра и послезавтра
Инновации и JavaScript
CodeFest 2014. Круглов И. — События на каждом углу. Путешествие в мир системн...
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Евгений Куршев, Яндекс.Метрика вместо сериалов: анализируем поведение пользов...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
Денис Чистяков — JavaScript на фронте и в тылу
Программируемость коммутаторов для ЦОД Cisco Nexus
«Новый 2ГИС Online» — Влад Семенов, 2ГИС
Php and frameworks
Андрей Сибирёв "Ваше собственное облако — война за независимость"
От заката до рассвета | Максим Безуглый | Zlit Tech
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
Tech Success: Web/2.0 startup HOWTO
Tech Success: Web/2.0 startup HOWTO

More from Max Klymyshyn (20)

PDF
Papers We Love Kyiv, July 2018: A Conflict-Free Replicated JSON Datatype
PDF
KharkivJS 2017: Коллаборативные системы и CRDT
PDF
OdessaJS 2017: Groupware Systems for fun and profit
PDF
PyCon Ukraine 2017: Operational Transformation
PDF
Communicating Sequential Processes (CSP) in JavaScript
PDF
PiterPy 2016: Parallelization, Aggregation and Validation of API in Python
PDF
Fighting async JavaScript (CSP)
PDF
KharkovPy #12: I/O in Python apps and smart logging (russian)
PDF
Изоформные приложения на React.js
PDF
Изоморфный JavaScript (iForum 2015)
PDF
Robust web apps with React.js
PDF
LvivJS 2014 - Win-win c React.js
PDF
Odessapy2013 - Graph databases and Python
PDF
Angular.js - JS Camp UKraine 2013
PPT
Зачем читать чужой код?
PPT
AgileBaseCamp 2013 - Start Up and Get Done
PDF
PyCon 2012 - Data Driven Design
KEY
LvivPy - Flask in details
PDF
Kyivpy#8 - Quality Driven Development with Python
KEY
Testing with Jenkins, Selenium and Continuous Deployment
Papers We Love Kyiv, July 2018: A Conflict-Free Replicated JSON Datatype
KharkivJS 2017: Коллаборативные системы и CRDT
OdessaJS 2017: Groupware Systems for fun and profit
PyCon Ukraine 2017: Operational Transformation
Communicating Sequential Processes (CSP) in JavaScript
PiterPy 2016: Parallelization, Aggregation and Validation of API in Python
Fighting async JavaScript (CSP)
KharkovPy #12: I/O in Python apps and smart logging (russian)
Изоформные приложения на React.js
Изоморфный JavaScript (iForum 2015)
Robust web apps with React.js
LvivJS 2014 - Win-win c React.js
Odessapy2013 - Graph databases and Python
Angular.js - JS Camp UKraine 2013
Зачем читать чужой код?
AgileBaseCamp 2013 - Start Up and Get Done
PyCon 2012 - Data Driven Design
LvivPy - Flask in details
Kyivpy#8 - Quality Driven Development with Python
Testing with Jenkins, Selenium and Continuous Deployment

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