Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Рвем жинжу на китайский флаг
Search
Moscow Python Meetup
PRO
February 20, 2014
Programming
700
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Рвем жинжу на китайский флаг
Виктор Коцеруба
Некоторые темы оптимизации кода на примере самописного шаблонизатора
Moscow Python Meetup
PRO
February 20, 2014
More Decks by Moscow Python Meetup
See All by Moscow Python Meetup
Moscow Python Meetup №111. Как мы изобретали Temporal, пытаясь просто создать приложение
moscowdjango
PRO
0
110
Moscow Python Meetup №110. Артём Тарасов (Альфа-Банк, Senior Engineer). Менторство как допинг: Как прокачать свои хард-скиллы, обучая других
moscowdjango
PRO
0
86
Moscow Python Meetup №110. Алёна Тямейкина (Островок.ру, Python Developer). Автоматизации процессов разработки
moscowdjango
PRO
0
95
Moscow Python Meetup №110. Адриан Макриденко (ГК Астра Линукс, разработчик серверной части). Токены авторизации: почему JWT легко использовать неправильно и как это исправляет PASETO?
moscowdjango
PRO
0
110
Moscow Python Meetup №109. Георгий Дьячков (Альфа банк, Главный разработчик). Векторные базы в агентной архитектуре и как изменятся вопросы на собеседованиях в 2026
moscowdjango
PRO
0
120
Moscow Python Meetup №109. Евгений Блинов (The Mutating Company). Ближайшее будущее мутационного тестирования на Python
moscowdjango
PRO
0
120
Moscow Python Meetup №108. Воркшоп "Построение AI-агента: Говори с данными на языке бизнеса"
moscowdjango
PRO
0
190
Moscow Python Meetup №108. Gather. Inspire. Deliver.
moscowdjango
PRO
0
140
Moscow Python Meetup №107. Бесшовные релизы глазами разработчика: обновляем код Облака без API
moscowdjango
PRO
0
130
Other Decks in Programming
See All in Programming
すこし踏み込む CancellationToken
htkym
2
960
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
520
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
390
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
4.9k
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
160
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
180
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
4.4k
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
330
アクセシビリティから考える情報設計
high_g_engineer
0
390
JRuby: Past, Present, and Future
headius
0
190
Java 27新機能 / Java 27 new features
kishida
2
170
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
390
Featured
See All Featured
Between Models and Reality
mayunak
4
460
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
Bash Introduction
62gerente
615
220k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
730
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
WCS-LA-2024
lcolladotor
0
830
How to Ace a Technical Interview
jacobian
281
24k
エンジニアに許された特別な時間の終わり
watany
109
250k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
Transcript
ПРИВЕТ
ТЫ НЕ УМЕЕШЬ ПИСАТЬ НА ПИТОНЕ правда правда
Я ТОЖЕ но стараюсь
ХВАЛЮ АРМИНА • pygments • sphinx • werkzeug • flask
• jinja • ast
ХВАЛЮ ЖИНЖУ • простая в использовании • умеет больше •
быстрая • без интерпретатора
КАК ОНА РАБОТАЕТ • парсит шаблон • генерирует код •
компилирует
РЕЗУЛЬТАТ - КОД НА ПИТОНЕ
None
None
РУГАЮ ЖИНЖУ • не знает про html • выводит через
yield • лишние name resolution (environment) • context ??
None
ЗАВИДУЮ HAML • понимает html • лаконичный • ruby, javascript
А КАК ЖЕ Я? 1. HamlPy = haml → django
2. mint - честный 3. PyHAML = haml → mako
НАДО ЧТО-ТО ДЕЛАТЬ! • тормоза - бесят • конвертировать -
скучно • синтаксис минта - не нравится
ПИШУ САМ
ПИШУ САМ • привычный синтаксис • высокая скорость • минимальные
усилия
ПИШУ САМ • использую ast.parse • генерирую код • оптимизирую
None
None
ДУМАЮ
ОПТИМИЗИРУЮ ast.NodeTransformer
ОПТИМИЗИРУЮ close_tag("table") ! print("</table>")
ОПТИМИЗИРУЮ open_tag("table", {"class": "foo"}) ! print('<table class="foo">')
ОПТИМИЗИРУЮ open_tag("td", {"name": name}) ! print('<td name="', quoteattr(name), ">')
ОПТИМИЗИРУЮ print('<tr>') print('<td>') ! print('<tr><td>')
ОПТИМИЗИРУЮ for i in [0, 1, 2]: print(i) ! print(0,
1, 2)
ЧИСТЫЕ ФУНКЦИИ привет, хаскель
ОПТИМИЗИРУЮ print(escape("<foo")) ! print("<foo")
ОПТИМИЗИРУЮ for i in range(3): print(i) ! print(0, 1, 2)
ИНЛАЙНИНГ привет, си
ОПТИМИЗИРУЮ def foo(i): print(i) foo(1) ! print(1)
ОПТИМИЗИРУЮ • считаю заранее • инлайню функции • разворачиваю циклы
• склеиваю строки • list.append / list.extend
None
None
HAMLY github.com/barbuza/hamly
НАСКОЛЬКО БЫСТРО msec mako jinja2 hamly 6,5 31,9 36,6
ДУМАТЬ - ПОЛЕЗНО
КАК НАУЧИТЬСЯ? • elixir • lisp (!) • haskell (!!)
ВОТ И ВСЕ