Обновить
1024K+

Python *

Высокоуровневый язык программирования

672,5
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Красивые трейсбеки в Python

Время на прочтение1 мин
Охват и читатели21K
Как часто вам присылают подобные отчеты об ошибке?

Traceback (most recent call last):
...
  File "...", line ..., in ...
    process(lst[index])
IndexError: list index out of range


Ох, если бы только узнать значение lst и index на тот момент...

python-catcher — автоматическая генерация HTML-трейсбеков с локальными переменными и исходниками, + загрузка в интернет — пользуйтесь на здоровье.



Читать дальше →

Мультиязыковые квайны

Время на прочтение4 мин
Охват и читатели20K
Прочитал статью «Эстафета из 50-ти квайнов». Действительно, человек написал потрясающую штуку, колоссальный труд, настоящее произведение искусства. Но по комментам судя, многие не понимают, как подобные вещи делаются и полагают их чем-то на грани, если не за гранью, человеческих возможностей, особенно много эмоций было по поводу эзотерических языков (Brainfuck, Unlambda, Whitespace) в списке.
В этой статье я попытаюсь объяснить, как подобные квайны пишутся.

Читать дальше →

Редактирование конфигов в Python

Время на прочтение4 мин
Охват и читатели18K


Вам когда-нибудь приходилось парсить и программно вносить изменения в чужие конфигурационные файлы? А в файлы с ненормальными форматами вроде того, что у NSD или BIND9? А если формат предусматривает переносы строк, смысловые отступы и сохранение комментариев, задача быстро покидает категорию тривиальных.

Вот почему я делюсь с вами библиотекой python-reconfigure.
Читать дальше →

Python: декорируем декораторы. Снова

Время на прочтение5 мин
Охват и читатели36K
В прошлом году на Хабре уже была очень развёрнутая статья в двух частях о декораторах. Цель этой новой статьи — cut to the chase и сразу заняться интересными, осмысленными примерами, чтобы успеть затем разобраться в примерах ещё более мудрёных, чем в предыдущих статьях.
Целевая аудитория — программисты, уже знакомые (например по C#) с функциями высшего порядка и с замыканиями, но привыкшие, что аннотации у функций — это «метаинформация», проявляющаяся только при рефлексии. Особенность Питона, сразу же бросающаяся в глаза таким программистам — то, что присутствие декоратора перед объявлением функции позволяет изменить поведение этой функции:



Как это работает?
Читать дальше →

Nitrous.IO — online IDE с SSH-доступом и десктоп приложением для синхронизации

Время на прочтение2 мин
Охват и читатели14K
image
Nitrous.IO — это online IDE для веб разработки на Ruby, Python, Node.js и Go (авторы общеют больше вариантов со временем). Главными отличиями от десятка подобных проектов являются полноценный SSH-доступ к своим боксам (о них чуть ниже) и десктоп приложение, синхронизирущее локальный код с боксами, также как это делает Dropbox. И главное — в базовом варианте все это предоставляется бесплатно, поэтому попробовать и понять, нужно ли оно вам — крайне просто.
Читать дальше →

Пока Vim пишет код за Вас…

Время на прочтение3 мин
Охват и читатели29K


Не буду долго распинаться на тему того, насколько велик и могуч Vim — это уже давно и достоверно известно. Кто-то даже утверждает, что «Практически любая строка латинских букв является синтаксически верной командой для vi».

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

Читать дальше →

Руководство по магическим методам в Питоне

Время на прочтение28 мин
Охват и читатели727K
Это перевод 1.17 версии руководства от Rafe Kettler.


Содержание


  1. Вступление
  2. Конструирование и инициализация
  3. Переопределение операторов на произвольных классах
  4. Представление своих классов
  5. Контроль доступа к атрибутам
  6. Создание произвольных последовательностей
  7. Отражение
  8. Вызываемые объекты
  9. Менеджеры контекста
  10. Абстрактные базовые классы
  11. Построение дескрипторов
  12. Копирование
  13. Использование модуля pickle на своих объектах
  14. Заключение
  15. Приложение 1: Как вызывать магические методы
  16. Приложение 2: Изменения в Питоне 3


Вступление


Что такое магические методы? Они всё в объектно-ориентированном Питоне. Это специальные методы, с помощью которых вы можете добавить в ваши классы «магию». Они всегда обрамлены двумя нижними подчеркиваниями (например, __init__ или __lt__). Ещё, они не так хорошо документированны, как хотелось бы. Все магические методы описаны в документации, но весьма беспорядочно и почти безо всякой организации. Поэтому, чтобы исправить то, что я воспринимаю как недостаток документации Питона, я собираюсь предоставить больше информации о магических методах, написанной на понятном языке и обильно снабжённой примерами. Надеюсь, это руководство вам понравится. Используйте его как обучающий материал, памятку или полное описание. Я просто постарался как можно понятнее описать магические методы.
Читать дальше

Используем поисковые движки для проверки корректности фраз

Время на прочтение3 мин
Охват и читатели10K
По работе мне часто приходится вести переписку на английском, и в силу недолеченного перфекционизма, пользоваться для этого оффлайн/онлайн переводными/толковыми словарями. В целом они со своей работой справляются, пока дело не доходит до проверки правильности словосочетаний или целых фраз. Хочешь ввернуть что-нибудь из разряда продвинутого владения языком, но нет уверенности, что правильно помнишь (большой привет предлогам и фразовым глаголам).

Есть парочка ресурсов, для поиска фраз, но заточены они в основном под общеупотребимые словосочетания, пословицы и фразеологизмы на отдельно взятом языке. К тому же не известно пользуются ли люди искомой фразой или употребив её вы поставите в тупик даже носителя языка.
Читать дальше →

Портирование на питон 3. Работа над ошибками

Время на прочтение13 мин
Охват и читатели12K
Примечание от переводчика:
Представляю вам, перевод интересной статьи Армина Ронахера, автора веб-фреймворков Flask и Werkzeug, шаблонизатора Jinja2 и вообще известного питониста об актуальных техниках и подводных камнях, применяемых им в его проектах при добавлении поддержки третьего питона. Небольшая заметка по поводу названия данной статьи. Оно является отсылкой к статье Армина 2010 года «Портирование на питон 3. Руководство», в которой он описывал подготовку кода для автоматического портирования через утилиту 2to3. Как показывает практика, сегодня такой подход является скорее антипаттерном, т.к. с одной стороны, качество кода в результате подобных операций заметно ухудшается, а кроме того, такой код заметно труднее поддерживать.


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

Томас Волдман из проекта MoinMoin начал с запуска Jinja2 через мой python-modernize с правильными параметрами, и пришел к единому коду, который работает под 2.6, 2.7 и 3.3. Путем небольших приборок мы смогли прийти к приятной кодовой базе, которая работает со всеми версиями питона и при этом, в большинстве своем, выглядит, как обычный код на питоне.

Вдохновившись этим результатом, я несколько раз прошерстил код и начал переводить кое-какой другой код, чтобы дополнительно поэкспериментировать с объединенной кодовой базой.

В данной статье я выборочно рассмотрю некоторые советы и фишки, которыми я могу поделиться, на случай если они кому-либо помогут в схожих ситуациях.
Читать дальше →

Удаленное управление объектами в Blender-е

Время на прочтение2 мин
Охват и читатели12K
Отлаживая разные алгоритмы управления для нашего робота, мы на себе прочувствовали насколько приятно было бы иметь среду моделирования и отлаживать программы сначала в ней, а потом уже тестировать на реальном роботе. Поскольку мы активно использовали Blender для создания моделей для 3Д-печати и для пользовательского интерфейса, мы решили попробовать Blender Game Engine в качестве среды для моделирования робота. Первые результаты оказались очень даже неплохими:

Читать дальше →

Python Tools для Visual Studio, о новинках из первых рук

Время на прочтение6 мин
Охват и читатели52K
Эта статья написана Павлом Минаевым int19h — разработчиком из команды PTVS специально для публикации в нашем корпоративном блоге на Хабрахабре. Делитесь вашими впечатлениями в комментариях. Все отзывы будут переданы команде.

Здравствуйте! Я – разработчик из команды Python Tools for Visual Studio. На днях мы выпустили новую бета-версию нашего продукта, и, воспользовавшись поводом, в этот раз я хотел бы поподробнее рассказать о том, что из себя представляет PTVS, и что он может вам предложить.

image
рассказ о новинках из первых рук...

Когда встроенного MVC не хватает

Время на прочтение8 мин
Охват и читатели9.6K
Одним из главных преимуществ фреймворков является их предопределённая архитектура. Открываешь незнакомый проект и сразу знаешь, где и как искать код связи с БД, или HTML, или схему url. Кроме того, она позволяет разработчику не задумываться над структурой хранения кода и при этом быть уверенным, что проект будет выглядеть более менее адекватно. Но хочу рассказать о случае, когда реализация MVC в Django, а именно распределение логики по файлам models, forms, views, templates оказалась неудобной и какую на её основе построили альтернативу.

Встала у нас задача сделать движок для статистической отчетности на Django. Мы создали селекторы для получения данных из Oracle и виджеты для отображения этих данных в виде таблиц или графиков (с помощью HighChart). Но это всё чисто технологические решения, без особой магии. Если появятся интересующиеся, расскажу в отдельном посте. А сейчас хотелось бы обратить внимание на более необычную часть проекта. На предоставление составителям отчетов удобного способа эти отчеты составлять.
Читать дальше →

Centrifuge — брокер реал-тайм сообщений

Время на прочтение6 мин
Охват и читатели21K
Привет, Хабр!

В статье я опишу свой небольшой open-source проект — Centrifuge (далее Центрифуга). Это сервер на Python, задача которого — рассылка (broadcast) сообщений в реальном времени подключенным (в основном из браузера) клиентам.

Это будет история, наполненная как личными эмоциями, так и описанием используемых технологий, но без примеров кода. Если вам близка тема — не проходите мимо, будет любопытно.

Для начала, посмотрите, пожалуйста, скринкаст (не забудьте включить субтитры), если после просмотра интерес не пропадет, смело читайте дальше!


Читать дальше →

Ближайшие события

Http запросы — мы все это делаем неправильно

Время на прочтение3 мин
Охват и читатели191K
В проекте, над которым я работаю, мы используем огромное количество сторонних библиотек. Многие из них — адаптеры для различных сервисов. Что их объединяет, это то, что они работают с сетью. Json поверх http, soap поверх http, какие-то свои протоколы поверх http. Т.е. все так или иначе используют http. И как ни удивительно, мало кто из них пользуется преимуществами его последней версии. Я не поленился заглянуть в википедию, прошло ровно 14 лет как была принята спецификация http 1.1. И потому я решил обратиться с призывом:
image

Да, речь пойдет о keep alive. Суть в том, что, начиная с http 1.1, клиент и сервер могут договориться не закрывать установленное tcp-соединение после завершения запроса, а переиспользовать его для следующих запросов. Это нужно потому, что на установку соединения требуется время. Иногда это время больше, чем время самого запроса. И если все серверы уже давным-давно такую возможность поддерживают, а все браузеры и большинство других клиентов её используют, то у разработчиков различных библиотек для популярных языков программирования здесь почему-то пробел.
Читать дальше →

Путеводитель по Python. Пишем великолепный код

Время на прочтение6 мин
Охват и читатели85K

Доброго времени суток, Хабрахабр. Сегодня на крыле принес еще один перевод я (pdf-ки гугловского стайл гайда выложены). Хотя, кто знает, если кто-то оценит сию работу — быть может появится и продолжение. Как-то днём одним, предложил мне мой широко известный в узких кругах коллега scraplesh почитать ресурс — The Hitchhiker’s Guide to Python! называемый. Ресурс этот понравился мне. Понравились советы выдаваемые там. Понравилась канва повествования и вообще понравилось направление мысли автора. А если что-то хорошо на Ваш вкус, то нужно передавать это из уст в уста:) Итак, решил я сделать перевод данного ресурса. Но не всё так сразу — сначала будет пробная статья «на отклик» хабрасообщества. Если уважаемым гикам понравится сия тематика и изложение — будем стараться выпускать новые части. На первый «отклик» я выбрал раздел — "Writing Great Code" и в нем два подпункта «Structure is Key» и «Modules». Откликнемся под катом.
Читать дальше →

Паттерны проектирования без ООП

Время на прочтение4 мин
Охват и читатели42K
Во времена, когда я писал на Лиспе и совсем не был знаком с ООП, я пытался найти паттерны проектирования, которые мог бы применить у себя в коде. И всё время натыкался на какие-то жуткие схемы классов. В итоге сделал вывод, что эти паттерны в функциональном программировании не применимы.

Теперь я пишу на Питоне и с ООП знаком. И паттерны мне теперь намного понятней. Но меня по-прежнему воротит от развесистых схем классов. Многие паттерны прекрасно работают в функциональной парадигме. Опишу несколько примеров.
Читать примеры

Chatter — основанный на python 2.7 websocket-framework с использованием tornado

Время на прочтение3 мин
Охват и читатели8.2K
Хочу представить сообществу своё небольшое творение — Chatter.

Chatter основан на python 2.7, использует tornado.

Имеется готовое API для python (бэкэнд) и для js (фронтэнд)

Примеры и исходный код на github.

Для чего же собственно он был создан?



Читать дальше →

Взлом аккаунта и юникодные символы

Время на прочтение3 мин
Охват и читатели35K
В техническом блоге «Спотифая» было опубликовано интересное исследование на тему взлома аккаунтов сервиса путём использования особенностей канонизации вводимых пользователем данных. Это стало возможным благодаря тому, чем спотифаевцы гордятся, — полностью юникодному логину. К примеру, пользователь легко может иметь снеговика в качестве имени аккаунта, если он того пожелает. Реализация подобного, впрочем, с самого начала доставляла некоторые неудобства.

Несколько лет назад в Великую пятницу на форуме техподдержки было опубликовано сообщение о возможности взлома любого аккаунта на сервисе. Представитель компании попросил продемонстрировать это на примере его собственного аккаунта, и через несколько минут ему был задан новый пароль и создан новый плейлист. Это немедленно привлекло внимание нескольких сотрудников, вынужденных провести Пасху в попытках закрыть «дыру». В связи с особенностями уязвимости регистрация новых аккаунтов была временно закрыта.

Хакер действовал следующим образом: желая взломать аккаунт с именем, скажем, bigbird, он регистрировал аккаунт с именем ᴮᴵᴳᴮᴵᴿᴰ (в Пайтоне эта строчка выглядит как u’\u1d2e\u1d35\u1d33\u1d2e\u1d35\u1d3f\u1d30′). После запроса ссылки на сброс пароля задавался новый пароль, который подходил к аккаунту bigbird.
Читать дальше →

PyRegs: анализатор регулярных выражений Python 3

Время на прочтение2 мин
Охват и читатели7.6K

Когда не стало Kodos


Беда пришла неожиданно. Из Debian Wheezy изъяли старый, добрый PyQt3. А с ним на покой отправился и Kodos — мой любимый дебаггер регулярных выражений Питона. Много лет он помогал тестировать красивые и жуткие конструкци и тот факт, что apt-get install kodos больше не работает, вызвал желание немедленно исправить это досадное недоразумение.
Читать дальше →

Сортировка треков в плейлисте VK

Время на прочтение1 мин
Охват и читатели67K


Disclaimer: я начал писать этот скрипт, когда весёлые новости ещё не подоспели.

Буду краток.
  • Что оно делает?
    • Переупорядочивает треки в вашем плейлисте в VK так, чтобы с минимальным вмешательством он стал выглядеть аккуратнее.
  • Где взять?
  • Как пользоваться?
    • Понадобится Python 2.7.x. Качаете, устанавливаете. Берёте файл vk_music_organizer.py из архива, открываете в блокноте, в самом начале пишете в строках email = '...' и password = '...' свой логин и пароль соответственно. Сохраняете. Если у вас корректно установлен Python, то после этого достаточно просто запустить этот файл двойным щелчком.

Читать дальше →