Неплохой вводный видео-курс по Python

Люблю смотреть разные видеокурсы по используемым языкам и технологиям. Причём не только по продвинутым темам, но и по базовым. Ещё не было такого курса, в котором не нашлось бы чего‑нибудь интересного и полезного для меня. О последнем просмотренном мной курсе от Георгия Курячего я хочу немного рассказать. Этот курс — отличное базовое введение в Python 2. Возможно, если вы изучали Python в университете, то этот курс покажется вам слабоватым. Но мне, как человеку, который изучал язык и его библиотеку разрозненно — по книгам, статьям и отдельным видео, — такой курс показался вполне достойным. Он полностью оправдал время, потраченное на него. ...

28 сентября 2015 г.

Итоги конференции PyConRu 2015

В субботу закончилась конференция PyCon Ru 2015 в Екатеринбурге. Немного остыв, можно подвести некоторые итоги. Конференция получилась хорошей. Как говорит один мой коллега, если на двухдневной конференции было два интересных доклада, то конференция удалась. На PyCon интересных и полезных докладов было больше. Я выделил 4 таких доклада. Начало положил Гаель Вароко. Если про scikit было просто интересно послушать — в повседневной работе мы машинным обучением не занимаемся, — то рассказ о второй библиотеке joblib заставил нас провести порядочное время на её сайте. Сама библиотека позволяет легко организовывать параллельные вычисления. И нам был очень интересен ответ на вопрос, сможем ли мы её использовать в своём проекте. ...

21 сентября 2015 г.

Почему не я люблю декораторы и метаклассы

Я не люблю декораторы и метаклассы. Почти любое использование декоратора и любое использование метакласса ухудшает читаемость кода. Их трудно использовать без усложнения кода. Они приводят к трудновыявляемым багам. Так что их использование должно быть обосновано. И их не нужно использовать там, где можно легко и безболезненно обойтись без них. Если сравнить использование остальных конструкций языка с использованием рогатки, то использование декоратора — это стрельба из пушки, а метаклассы — из системы залпового огня «Град». Последствия их неправильного использования влияют на кодовую базу примерно так же. Декоратор «разламывает» несколько функций и методов, метакласс «разрывает в клочья» несколько классов. ...

14 сентября 2015 г.

Type Hinting в Python 3.5

«Утиная» типизация, конечно, ускоряет написание программ, но только до определённых пределов. В больших проектах, когда количество кода достаточно велико, такая гибкость начинает давать сбои. С Python 3.0 можно делать типизацию для функций. Но только с 3.5 появится действительно мощный инструмент, встроенный в язык. Конечно, можно делать описание параметров и возвращаемых значений в докстрингах. Вот только кто их пишет? А если пишет, то кто следит за их актуальностью? Программисты ленивы: если можно что‑то не делать, они не будут этого делать. ...

31 августа 2015 г.

Кастомные коллекции

Хорошо написанный код на Python должен работать с последовательностями однообразно. При этом неважно, встроенные это последовательности или нет. Тем более что свою последовательность написать в Python очень просто. Нужно всего лишь переопределить __len__ и __getitem__, чтобы работа с вашей последовательностью в большинстве случаев не отличалась от работы со встроенными последовательностями. В качестве иллюстрации возьмём такой пример. У нас есть класс ShoppingBasket. В нём лежат какие‑то товары. Пусть нам нужно пройтись по всем товарам, научиться получать товары по ключу и добавлять товары. ...

24 августа 2015 г.

Celery: Pickle от которого невозможно отказаться

Если вы решили поменять сериализатор задач для Celery с Pickle на какой‑нибудь другой, ничего не выйдет. Вернее, задачи действительно будут сериализоваться и десериализоваться с помощью указанного сериализатора. Но внутри Celery всё равно используется Pickle, и это никак не изменить. Вернее, не в Celery, а в библиотеке billiard, которая используется мастер‑процессом воркера для раздачи задач из очереди подпроцессам. В нашем проекте мы столкнулись с тем, что иногда передаём в качестве параметра задач Celery NoneType. Причём не значение None, а именно NoneType. ...

10 августа 2015 г.

Декораторы с параметрами по умолчанию

Декораторы в Python — удобный инструмент. Если ими пользоваться с умом, они значительно повышают читаемость кода и его повторное использование. Но есть один момент, который меня немного напрягает: для декоратора с параметрами по умолчанию нужно ставить пустые круглые скобки после его вызова. Время от времени это приводит к ошибкам. Особенно это актуально, если декоратор является частью публичного API. @decorator_wo_params def f1(): pass @decorator_w_defaults_params() # Ну зачем здесь пустые скобки? def f2(): pass С этим можно смириться. В режиме жёстких сроков и большого потока задач времени на поиск решения, написание и тестирование дополнительного кода может просто не быть. Нормальное тестирование выявит проблему моментально. Но иногда невозможно удержаться и не сделать свой код немного красивее. ...

3 августа 2015 г.