Upload
krivoy-rog-it-community
View
1.550
Download
4
Embed Size (px)
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
…и на эти:
● Bitbucket.org● python.org● learnpython.org● checkio.org● heroku.com● appengine.google.com
Вопросы?
Спасибо! Ищите меня здесь:
● https://bitbucket.org/batment● https://github.com/SergeyBurma● https://twitter.com/SergeyBurma● skype: s_burma