background preloader

Хабра_python

Facebook Twitter

Путеводитель по Python. Пишем великолепный код. Доброго времени суток, Хабрахабр. Сегодня на крыле принес еще один перевод я (pdf-ки гугловского стайл гайда выложены). Хотя, кто знает, если кто-то оценит сию работу — быть может появится и продолжение. Как-то днём одним, предложил мне мой широко известный в узких кругах коллега scraplesh почитать ресурс — The Hitchhiker’s Guide to Python! Называемый. Фотография Кеннета Kenneth Reitz на PyCon в Австралии (2012) Далее — собственно сама статья. Структурируйте свой проект Под структурой мы подразумеваем решения, которые Вы приняли в отношении того, как Ваш проект сможет достичь поставленных целей. Какие функции должны быть перемещены в какие модули? В данном разделе мы внимательнее посмотрим на систему модулей и импортов в Python, т.к. они являются центральным элементом в обеспечении структурирования Вашего проекта.

Структура решает Благодаря тому, что импорты и модули обрабатываются в Python, сравнительно просто структурировать проект написанный на этом языке. Модули. Python, формирование структуры — Guido van Rossum (часть 2) Это продолжение статьи из официального блога автора любимого всеми нами языка. Поэтому повествование ведется от лица самого Гуидо ван Россума. Первая часть здесь. Введение и обзор Вступление. Python сейчас является одним из самых популярных некомпилируемых языков программирования, наравне с Perl, Tcl, PHP и Ruby. Благодарности: Я в долгу перед Дейвом Бизли (Dave Beazley) за много хороших слов в этом блоге (за историей о появлении этого блога добро пожаловать в другой мой блог).

Полет над гнездом питона. Когда пользователи впервые сталкиваются с Python, они бывают сильно удивлены тем, что код, написанный на нем, выглядит, по крайней мере внешне, очень похожим на код, написанный на других традиционных языках программирования, таких, как C или Pascal. If (a < b) { max = b; } else { max = a; } Python же в данном выражении вообще обходится без скобок (как и без точек с запятой) и использует следующую структуру: if a < b: max = b else: max = a © Guido van Rossum. Непрерывное тестирование питонопроекта. Программист зверь ленивый, поэтому всё, что будет делаться больше одного раза надо непременно заскриптовать. Я уже некоторое время ковыряю TDD и задача постоянного контроля качества для меня становится всё актуальней.

Особенно при пополнении команды новыми разработчиками. Сначала я запускал тесты руками: save, switch, $ nosetests. Потом к тестам добавились проверялки качества кода и пришлось всё засунуть в скрипт:pyflakes *.py pep8 *.py pylint *.py nosetests Скрипт запускать каждый раз ужасно лениво, поэтому небольшая оболочка на inotifywait стала запускать тесты и проверки после каждого сохранения:while true; do inotifywait -e modify project/*.py -qq; clear . Тут я стал более-менее доволен происходящим и даже на некоторое время расслабился.

Кроме того довольно тяжело следить за коллегами, которые тоже могут что-то сделать и забыть прогнать тесты, в результате в репозитории лежит битый код, не прошедший code review и при очередном pull может внезапно начаться clusterfuck. Что внутри? Отчёты. Code Like a Pythonista: Idiomatic Python (part0) От переводчика: Я только начал изучать Python. С самого первого знакомства язык порадовал симпатичными конструкциями и синтаксически-гарантированной удобностью к чтению и пониманию кода. В процессе освоения, при написании своего кода, бывает, сомневаюсь в правильности выбранных способов с точки зрения Python-way ( PEP 8 — Style Guide for Python Code, если угодно). Для вникания в идеологию программирования, в Python-сообществе кроме исчерпывающей документации, ко всеобщей радости, накоплено уже немало вспомогательных материалов, таких как статья Python Tips, Tricks, and Hacks, перевод которой недавно появился на ХабреМне понравилась статья Дэвида Гуджера «Пиши код, как настоящий Питонист: идиоматика Python» (David Goodger «Code Like a Pythonista: Idiomatic Python»).

David Goodger goodger@python.org В этом интерактивном туториале мы рассмотрим множество существенных Python-идиом и техник углубленного уровня, которые непременно расширят ваш инструментарий. Хорошо: Советы Google по кодированию на языке Python. Часть первая: советы по программированию. Используйте свойства для доступа к данным или присвоения значений там, где Вы бы обычно использовали простой метод геттер или сеттер. Определение Способ обернуть вызовы метода доступа и присвоения атрибута как стандартный доступ к атрибуту, конечно, если вычисления не очень сложные. Плюсы Удобочитаемость повышается за счет исключения явных вызовов get- и set-методов для простого доступа к атрибуту. Возможны ленивые вычисления.

Считается, что поддерживать интерфейс класса — часть пути Python. Минусы Свойства объявляются после того, как методы get и set были объявлены, требуя сообщить им, что они используются для свойств, находящихся ниже в коде (исключая свойства доступные только на чтение, созданные с помощью декоратора @property, о нем смотрите ниже). Решение Используйте свойства в только что написанном коде для доступа или изменения данных там, где Вы бы использовали простой get-метод или set-метод. Хорошо: Советы Google по кодированию на языке Python. Часть вторая: советы по форматированию исходного кода. Будьте уверены в использовании правильного стиля для модуля, функции, метода или строкового комментария. Строки документации. Python имеет уникальный стиль комментирования — строки документации. Строка документации это строка, которая является первой конструкцией в пакете, модуле, классе или функции. Такие строки могут быть экспортированы автоматически с помощью атрибута объекта __doc__ и используются pydoc-ом.

Модули Каждый файл должен содержать в себе шаблон лицензии. Функции и методы Используемый в этом разделе термин (функция) относится к методам, функциям и генераторам. Классы Классы должны иметь строку документации ниже своего объявления. Class SampleClass(object): """Summary of class here. Блоки и инлайновые комментарии Последнее место, которое должны иметь комментарии — это хитрые места в коде.

If i & (i-1) == 0: Чтобы улучшить читаемость, такие комменарии должны находиться на расстоянии по меньшей мере 2-х пробелов от кода. Заметки об объектной системе языка Python ч.1. Несколько заметок об объектной системе python'a. Рассчитаны на тех, кто уже умеет программировать на python. Речь идет только о новых классах (new-style classes) в python 2.3 и выше. В этой статье рассказывается, что такое объекты и как происходит поиск атрибутов. Объекты Все данные в питоне — это объекты. Каждый объект имеет 2 специальных атрибута __class__ и __dict__.

__class__ — определяет класс или тип, экзмепляром которого является объект. >>> def foo(): pass... >>> foo. У a тоже есть __dict__ и __class__: Класс и тип — это одно и то же. >>> a. a. И, например, в методах класса присваивание self.foo = bar практически идентично self. В __dict__ объекта нет методов класса, дескрипторов, классовых переменных, свойств, статических методов класса, все они определяются динамически с помощью класса из __class__ атрибута, и являются специфичными именно для класса (типа) объекта, а не для самого объекта.

Пример. Смотрим, что поменялось. Значение a.name осталось прежним, т.е. >>> del a.qux Итак: >>> A. Заметки об объектной системе языка Python ч.3. Третья часть заметок об объектной системе python'a (первая и вторая части). В статье рассказывается о том, почему c. __call__() не то же самое, что и c(), как реализовать singleton с помощью метаклассов, что такое name mangling и как оно работает. c. __call__ vs c(), c. __setattr__ vs setattr Легко убедиться, что x(arg1, arg2) не равносильно x. >>> class C(object):... На самом деле правильно: c() <=> type©. Абсолютно такая же ситуация с __setattr__/setattr и многими другими магическими (и специальными) методами и соответствующими встроенными функциями, которые определены для всех объектов, в том числе и для объектов типа — классов. Зачем это было сделано можно рассмотреть на примере setattr [1].

A.x = 1 <=> setattr(a, 'x', 1) Устанавливаем с помощью метода __setattr__ новый атрибут, который пойдет в __dict__ >>> a. вроде бы все правильно: Однако: Установим в a. >>> a. Вызов, которого приводит к ошибке: >>> a. Однако, несмотря на это, setattr работает: А вот если переопределить метод класса: >>> A. >>> A. Заметки об объектной системе языка Python ч.2. Вторая часть заметок об объектной системе python'a (первая часть тут). В этой статье рассказывается, что такое классы, метаклассы, type, object и как происходит поиск атрибутов в классе. Классы Классы (типы) — это объектные фабрики. Их главная задача — создавать объекты, обладающие определенным поведением. Классы определяют поведение объектов с помощью своих атрибутов (которые хранятся в __dict__ класса): методов, свойств, классовых переменные, дескрипторов, а также с помощью атрибутов, унаследованных от родительских классов.

Инстанцирование обычного объекта происходит в 2 этапа: сначала его создание, потом инициализация. Соответственно, сначала запускается метод класса __new__, который возвращает объект данного класса, потом выполняется метод класса __init__, который инициализирует уже созданный объект. def __new__(cls, ...) — статический метод (но его можно таковым не объявлять), который создает объект класса cls. Например, объявим класс: >>> class A(object):... И найдет: >>> object. Пример. Руководство к дескрипторам. Краткий обзор В этой статье я расскажу о том, что такое дескрипторы, о протоколе дескрипторов, покажу как вызываются дескрипторы.

Опишу создание собственных и исследую несколько встроенных дескрипторов, включая функции, свойства, статические методы и методы класса. С помощью простого приложения покажу, как работает каждый из них, приведу эквиваленты внутренней реализации работы дескрипторов кодом на чистом питоне. Изучение того, как работают дескрипторы, откроет доступ к большему числу рабочих инструментов, поможет лучше понять как работает питон, и ощутить элегантность его дизайна.

Введение и определения Если говорить в общем, то дескриптор — это атрибут объекта со связанным поведением (англ. binding behavior), т.е. такой, чьё поведение при доступе переопределяется методами протокола дескриптора. Стандартное поведение при доступе к атрибутам — это получение, установка и удаление атрибута из словаря объекта. Дескрипторы — это мощный протокол с широкой областью применения. Descr. Свойства. Не ещё одна статья о функциональном программировании. Вот уже несколько лет функциональное программирование набирает популярность. Это, конечно, не значит, что люди забрасывают свои старые языки и ООП и массово переходят на Haskell, Lisp или Erlang. Нет. Функциональная парадигма проникает в наш код через лазейки мультипарадигменных языков, а вышеупомянутые языки чаще служат флагами в этом наступлении, чем используются непосредственно.

Я собирался продолжить в том же духе и во второй части статьи представить свою библиотеку, добавляющую пару функциональных трюков в python, но потом понял, что фокус моей библиотеки не на функциональном программировании, а на практичности. На этом я и сосредоточюсь, приведу несколько жизненных примеров полезности funcy. Я пройдусь по нескольким типичным задачам, которые встречаются в питоньей практике, и несмотря на свою незамысловатость, вызывают постоянные вопросы. Несложные манипуляции с данными 1. From funcy import cat cat(list_of_lists) from funcy import mapcat mapcat(str.splitlines, bunch_of_texts) 2. 3.