Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Рвем жинжу на китайский флаг
Search
Moscow Python Meetup
PRO
February 20, 2014
Programming
0
670
Рвем жинжу на китайский флаг
Виктор Коцеруба
Некоторые темы оптимизации кода на примере самописного шаблонизатора
Moscow Python Meetup
PRO
February 20, 2014
Tweet
Share
More Decks by Moscow Python Meetup
See All by Moscow Python Meetup
Moscow Python Meetup №105. Кирилл Гладких (ООО Штаб, Python разработчик). Как вайбкодить по-сениорски
moscowdjango
PRO
0
76
Moscow Python Meetup №105. Пётр Андреев (МФТИ, лектор по курсу Advanced Python). Дотянуться до кремния. HighLoad Python: SIMD, GPU
moscowdjango
PRO
0
27
Moscow Python Meetup №105. Антон Важнецов (K2 Cloud, Тимлид). Подход к глубоким изменениям. Миграция SDN в боевом облаке на Python
moscowdjango
PRO
0
22
Moscow Python Meetup №104. Как научить Алису рецептам дореволюционной кухни
moscowdjango
PRO
0
28
Moscow Python Meetup №104. Оптимизация сервиса АБ тестирования или как уйти от Django ORM к Fastapi query builder
moscowdjango
PRO
0
43
Moscow Python Meetup №104. CI/CD Pytest для тестирования качества данных здравоохр. в Великобритании
moscowdjango
PRO
0
27
Moscow Python Meetup №103. Станислав Коленский (Самозанятый, репетитор). Как учат программированию в школьный период и на сколько можно готовить кадры с подросткового возраста
moscowdjango
PRO
0
51
Moscow Python Meetup №103. Мария Рубаненко (Fintech AI / Tech lead DS). Суперсжатие на строках
moscowdjango
PRO
0
85
Moscow Python Meetup №103. Михаил Попов (Assigna Python Backend Developer). Vibe coding. Очевидные преимущества и непоправимые угрозы
moscowdjango
PRO
0
45
Other Decks in Programming
See All in Programming
品質ワークショップをやってみた
nealle
0
720
NixOS + Kubernetesで構築する自宅サーバーのすべて
ichi_h3
0
1.3k
オープンソースソフトウェアへの解像度🔬
utam0k
18
3.2k
Go言語はstack overflowの夢を見るか?
logica0419
0
660
ビルドプロセスをデバッグしよう!
yt8492
0
170
Vue 3.6 時代のリアクティビティ最前線 〜Vapor/alien-signals の実践とパフォーマンス最適化〜
hiranuma
2
330
When Dependencies Fail: Building Antifragile Applications in a Fragile World
selcukusta
0
120
AI 駆動開発におけるコミュニティと AWS CDK の価値
konokenj
5
300
Google Opalで使える37のライブラリ
mickey_kubo
3
170
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
110
CSC509 Lecture 08
javiergs
PRO
0
270
Google Opal解体新書
mickey_kubo
3
100
Featured
See All Featured
KATA
mclloyd
PRO
32
15k
4 Signs Your Business is Dying
shpigford
186
22k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.5k
Automating Front-end Workflow
addyosmani
1371
200k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
Fireside Chat
paigeccino
41
3.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
Visualization
eitanlees
150
16k
Building Adaptive Systems
keathley
44
2.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 (!!)
ВОТ И ВСЕ