Kranonit s16 (python). sergey burma

Preview:

DESCRIPTION

 

Citation preview

kranonit S16 02.11.2013

Сергей БурмаPython-разработчик

Полтора года с Python на фрилансе. Год до этого - как любитель.

Люблю:● Django;● Tornado;● Redis;● Черную магию (Gevent, ФП);● Инди-игры;● Хорошо приготовленный кофе:)

Факториал на Python

reduce(lambda x, y: x * y, xrange(1, x+1))

Факториал 10 000:● ~200 мс;● около ТРИДЦАТИ ПЯТИ ТЫСЯЧ знаков.

Гвидо Ван Россум

Кто использует?

● NASA● Google● Yahoo● Yandex● Dropbox● IBM● Bitbucket● …и все остальные;)

The Zen of Python● Beautiful is better than ugly.● Explicit is better than implicit.● Simple is better than complex.● Complex is better than complicated.● Flat is better than nested.● Sparse is better than dense.● Readability counts.● Special cases aren't special enough to break the rules.● Although practicality beats purity.● Errors should never pass silently.● Unless explicitly silenced.● In the face of ambiguity, refuse the temptation to guess.● There should be one - and preferably only one - obvious way to do it.● Although that way may not be obvious at first unless you're Dutch.● Now is better than never.● Although never is often better than *right* now.● If the implementation is hard to explain, it's a bad idea.● If the implementation is easy to explain, it may be a good idea.● Namespaces are one honking great idea - let's do more of those!

Простота и понятность!

Да-да, именно он будет поддерживать ваш код!

Говорить легко, но как делать?

● PEP8;● функция должна вмещаться в экран;● одна операция на строку;● правильные задачи.

Неправильно:reduce(lambda x, y: x * y, xrange(1, x+1))

Правильно:def multiply(x, y):

return x * y

def factorial(x):numbers = xrange(1, x + 1)result = reduce(multiply, numbers)return result

● На самом деле, как писать код говорит вам только совесть - язык мультипарадигменный.

● ООП реализовано ненавязчиво, хоть все и говорят, что так не тру.

● Очень приятная реализация механизма исключений.● Продуманная система типов и структур данных. Того

что есть хватит надолго, работает все к тому же быстро.

● Продвинутые неизменяемые типы, такие как string, tuple, frozen set, которые можно использовать, например, как хеши в словаре.

● Продвинутая работа с функциями, но от этого страдает простота кода, так что не рекомендуется.

Возможности

2 или 3?

● Огромное количество библиотек еще не портировано.

● Большинство относится скептически.

Но:● Версия 2.7.5 уже больше года не развивается.● В 3.3 есть много новых интересных решений.● Есть библиотеки для автоматического

портирования. Работают не везде.

Плюшки

● PEP8;● Global Interpreter Lock;● динамическая типизация;● куча интересных идей с асинхронностью;● очень крутая реализация REPL;● быстрая реализация и исполнение КОРРЕКТНЫХ

задач;● батарейки, очень много батареек, сразу;● огромное сообщество с пожизненным диктатором во

главе;● очень подробная документация, касающаяся всего;● PyPi.

Неплюшки

● PEP8;● Global Interpreter Lock;● динамическая типизация;● куча интересных идей с асинхронностью;● очень крутая реализация REPL;● быстрая реализация и исполнение КОРРЕКТНЫХ

задач;● батарейки, очень много батареек, сразу;● огромное сообщество с пожизненным диктатором во

главе;● очень подробная документация, касающаяся всего;● PyPi.

И что с этим всем делать?

● Web-сайты, серверные приложения;● парсеры;● нетребовательные к вычислениям десктопные

приложения;● системные скрипты;● мобильные приложения;● игры, в особенности рогалики;● разного рода прототипы, от идей до программ.

С кем дружить?

Интерпретаторы

● CPython;● Stackless Python;● RPython;● PyPy;● IronPython;● Jython.

REPL

● Python;● IPython;● DreamPie;● REPL в PyCharm.

Редакторы

● VIM, Emacs...;● Sublime Text Editor;● IDLE;● Geany.

IDE

● Eclipse;● NetBeans;● PyCharm;● Eric и многие другие.

Отдельные инструменты

● Mercurial;● PDB;● PyFlakes, PyLint, PEP8.

На что стоит посмотреть?(субъективное мнение докладчика, которое может не совпадать с

реальностью)

● крутая IDE в стиле IntelliJ IDEA;● продвинутая поддержка очень многих важных и

интересных решений;● интеграция всего, о чем вы даже не мечтали;● Community Edition.

Но:● неисправляемые от версии к версии баги, к счастью,

таких немного;● требовательность к ресурсам, настроение

разработчика будет зависеть от их количества.

● The Web framework for perfectionists (with deadlines)● Models Views Templates● Просто делай, как тебе говорят, и у тебя будет

отличный код.● Множество батареек, встроенных тоже хватит

надолго.

Но:● Кое-какие моменты могут стать сюрпризом.● Очень прагматичное сообщество, да и сам django.● Тормознутость на сложных проектах, тут лучше

взять что-то другое или разбить на несколько.

● Чудо. Вообще не представляю, как такое кому-то пришло в голову.

● Родные приложения под Windows, Linux, Mac OS X, Android, iOS. Но со встроенным Python’ом.

● Пиши-раз-компилируй-под-что-угодно. Почти правда.

● Куча готовых компонентов.

Но:● Новые компоненты нужно писать с учетом всех

поддерживаемых систем.● Сторонних библиотек мало.

kivy

● Просто черная магия.

Но:● Есть шанс, что использовав раз, после смерти

можно попасть в ад.

gevent

● Микрофреймворк, но с асинхронностью.● А еще веб-сервер и просто хорошая библиотека.● Можно прикрутить к django, чтобы тот мог думать не

только в пределах одного запроса.● Очень элегантная замена колбэкам, которую, кстати,

хотят внести в стандартную библиотеку. В стиле:result = yield db.read()

вместо: db.read(onComplete)

Но:● Мало асинхронных драйверов к базам данных. Есть

шанс упустить все плюсы.

Взгляните еще на эти проекты:

● NumPy● lxml● requests● flask● bottle.py● Syte● django-tastypie● dajax● pygame● libtcod● cython

Вопросы?

Спасибо! Ищите меня здесь:

● https://bitbucket.org/batment● https://github.com/SergeyBurma● https://twitter.com/SergeyBurma● skype: s_burma