Обновить
512K+

Python *

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

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

Python, каким бы я хотел его видеть

Время на прочтение11 мин
Охват и читатели46K
Всем известно, что мне не нравится третья версия Python и то, в каком направлении развивается этот язык программирования. За последние несколько месяцев я получил много писем с вопросами о моём видении развития Python и решил поделиться своими мыслями с сообществом, чтобы, по возможности, дать пищу для размышлений будущим разработчикам языка.

Можно сказать совершенно точно: Python не является идеальным языком программирования. На мой взгляд, основные проблемы вытекают из особенностей интерпретатора и мало связаны с самим языком, однако все эти нюансы интерпретатора постепенно становятся частью самого языка, и поэтому они так важны.

Я хочу начать наш разговор с одной странности интерпретатора (слоты) и закончить его самой большой ошибкой архитектуры языка. По сути, эта серия постов является исследованием решений, заложенных в архитектуре интерпретатора, и их влияния как на интерпретатор, так и на сам язык. Я считаю, что с точки зрения общего дизайна языка такие статьи будут выглядеть гораздо интереснее, чем просто высказывание мыслей по улучшению Python.
Читать дальше →

Мега-Учебник Flask, Часть 12: Реконструкция

Время на прочтение4 мин
Охват и читатели23K
Это двенадцатая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.



Краткое повторение



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

Мы усердно трудились, кодируя логику до текущего момента, поэтому сейчас мы сделаем перерыв и посмотрим как мы можем сделать наше приложение чуточку красивей для наших пользователей.
Читать дальше →

Мега-Учебник Flask, Часть 11: Поддержка e-mail

Время на прочтение8 мин
Охват и читатели26K
Это одиннадцатая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.


Краткое повторение


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

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

Мега-Учебник Flask, Часть 10: Полнотекстовый поиск

Время на прочтение7 мин
Охват и читатели20K
Это десятая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.



Краткое повторение


В предыдущей статье мы улучшили наши запросы так, чтобы они возвращали посты на страницу.

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

Окружение для разработки на aiorest (asyncio) + angular.js

Время на прочтение4 мин
Охват и читатели6.4K
В этой статье мы соберём вместе aiorest + jinja2 + angular.js + gulp.js + bower.js + nginx. В результате мы получим:
  • авто-перезапуск сервера при изменении python-кода и jinja-шаблонов
  • сборка, минификация и автоматическая пересборка при изменении клиентского js-кода
Начнём с главного — как пользоваться, а затем я подробнее опишу некоторые моменты реализации. Если вам легче читать код — вот ссылка на репу.

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

Push-уведомления в REST API на примере системы Таргет Mail.Ru

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


«Ну а здесь, знаешь ли, приходится бежать со всех ног, чтобы только остаться на том же месте, а чтобы попасть в другое место, нужно бежать вдвое быстрее»
Льюис Кэрролл, «Алиса в Зазеркалье»

Недавно мы в Таргете Mail.Ru реализовали систему push-уведомлений. Грамотное использование очередей задач позволяет реализовать быструю систему доставки уведомлений. В этом посте я расскажу о применении и реализации этой модели в нашем сервисе.
Читать дальше →

Item-based коллаборативная фильтрация своими руками

Время на прочтение10 мин
Охват и читатели21K
Робот-рекомендатель

Одной из наиболее популярных техник для построения персонализированных рекомендательных систем (RS, чтобы не путать с ПиСи) является коллаборативная фильтрация. Коллаборативная фильтрация бывает двух типов: user-based и item-based. User-based часто используется в качестве примера построения персонализированных RS [на хабре, в книге Т.Сегаран,...]. Тем не менее, у user-based подхода есть существенный недостаток: с увеличением количества пользователей RS линейно увеличивается сложность вычисления персонализированной рекомендации.

Когда количество объектов для рекомендаций большое, затраты на user-based подход могут быть оправданы. Однако во многих сервисах, в том числе и в ivi.ru, количество объектов в разы меньше количества пользователей. Для таких случаев и придуман item-based подход.

В этой статье я расскажу, как за несколько минут можно создать полноценную персонализированную RS на основе item-based подхода.
Читать дальше

Выразительная простота python на примере задач из комбинаторики

Время на прочтение2 мин
Охват и читатели26K
В процессе самообучения языку программирования python(имея знания с/с++) решил написать в качестве задания функции генерирующие элементы из различных множеств комбинаторных конфигураций. Конечно, можно справедливо заметить, что подобный функционал уже есть в стандартной библиотеке python в модуле itertools, но у каждого должно быть право изобрести велосипед, тем более в целях обучения…
Тот кто знаком с основами теории вероятностей должны помнить, что такое урновые схемы и о чем эта таблица:


И так ТЗ — написать четыре генератора, которые принимая строку s, состоящую из уникальных символов, и размер выборки к, возвращают строку — выборку с повторением/без повторений из k символов строки s порядок важен/не важен.
В результате получился следующий код:

import itertools
from functools import partial

import unittest

def template(s, k, assertion, reducer):
    n = len(s)
    assert assertion(n, k)
    
    if k == 0:
        yield ""
    elif k == 1:
        for c in s:
            yield c
    else:
        k-=1
        for i, c in enumerate(s):
            new_s = reducer(s, i)
            if not assertion(len(new_s), k):
                break
            for res in template(new_s, k, assertion, reducer):
                yield c+res
            
assertion_norep = lambda n, k: n > 0 and n >= k and k >= 0
assertion_rep   = lambda n, k: n > 0 and k >= 0

permutation_norep = partial(template, assertion=assertion_norep, reducer=lambda s, i: s[:i]+s[i+1:])
permutation_rep = partial(template, assertion=assertion_rep, reducer=lambda s, i: s)
combination_norep = partial(template, assertion=assertion_norep, reducer=lambda s, i: s[i+1:])
combination_rep = partial(template, assertion=assertion_rep, reducer=lambda s, i: s[i:])


class TestCombinatoricGenerators(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.test_string = "abcdefg"
        cls.k = 5

    def test_permutation_norep(self):
        self.assertEquals(set(permutation_norep(self.test_string, self.k)),
                          set(map(''.join, itertools.permutations(self.test_string, self.k))))

    def test_permutation_rep(self):
        self.assertEquals(set(permutation_rep(self.test_string, self.k)),
                          set(map(''.join, itertools.product(self.test_string, repeat=self.k))))

    def test_combination_norep(self):
        self.assertEquals(set(combination_norep(self.test_string, self.k)),
                          set(map(''.join, itertools.combinations(self.test_string, self.k))))

    def test_combination_rep(self):
        self.assertEquals(set(combination_rep(self.test_string, self.k)),
                          set(map(''.join, itertools.combinations_with_replacement(self.test_string, self.k))))

if __name__ == '__main__':
    unittest.main()


Так как python является языком еще более высокого уровня абстракции, чем с/с++, поэтому он позволяет проще и выразительнее писать код, который бы на других языках выглядел бы более громоздко и запутаннее. Новичкам в python я хотел бы обратить внимание на несколько моментов:

  • return после yield
  • Рекурсивный генератор
  • Шаблон стратегия
  • Использование lambda функций


P.S.
Могу добавить, что я не сразу пришел к подобному решению, использующему общую «шаблонную» функцию. Сначала я написал все функции по отдельности, а потом выделил общее и различное.

Удаленное управление VLC player’ом при помощи Arduino и Python

Время на прочтение4 мин
Охват и читатели16K
Добрый день, уважаемые читатели.

Я давно интересовался Arduino, и вот однажды решился на покупку этой замечательной платформы. После недолгих поисков приобрел небольшой Arduino kit, в котором, помимо прочего, был ИК-датчик и пульт к нему. Изучив примеры из мануала, понял, что настало время придумать что-то свое. В итоге я решил сделать удаленное управление VLC player’ом, используя магию Arduino и Python3.
Читать дальше →

Интеграция MS Excel и Python

Время на прочтение6 мин
Охват и читатели387K
Добрый день, уважаемые читатели.

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

Как мы делали небольшую охранную систему на RPi. Часть 1

Время на прочтение6 мин
Охват и читатели43K
Здравствуйте Хабражители!

Думаю многие из вас слышали о Raspberry Pi, более того, думаю довольно большое количество из вас видели его вживую. В начале 2014 года я решил, что пора мне тоже заказать себе парочку RPi и сделать на них что-то интересное. Так как я являюсь iOS разработчиком, я загорелся идеей обязательно прицепить к этому проекту iOS приложение. Ну и т.к. RPi довольно хорошо умеет работать со сторонним железом, я решил что сделаю небольшую охранную систему для личного пользования.



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

Приглашаем на Moscow Django Meetup 31 июля

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

Если вы ещё не уехали в отпуск (или уже вернулись), то хотим пригласить вас 31 июля на очередной, уже 21-й по счёту, Moscow Django Meetup. Как обычно, формат встречи подразумевает небольшую программу выступлений. Всего будет два доклада:
  1. Использование сервис-ориентированной архитектуры (SOA) для построения сложных веб-проектов.
  2. О вреде априорныхъ формъ познанiя въ примененiи къ содержанiю веб-страниц на прiмерахъ Django и Яндекс.Метрики.
Читать дальше →

Python-digest #34. Новости, интересные проекты, статьи и интервью [20 июля 2014 — 27 июля 2014]

Время на прочтение3 мин
Охват и читатели6.5K
Очередной выпуск новостей из мира Python. Мы продолжаем собирать для вас интересную информацию о любимом языке программирования и близлежащих технологиях. За иллюстрацию к посту, как и раньше, благодарим owlman75, а так же alrusdi за рождение идеи дайджестов и за то, что я по прежнему могу публиковать эти дайджесты для вас. Возможно, вы спросите, а что же нового в мире python произошло? А мы вам ответим, произошло много интересных событий, таких как, релизы SQLAlchemy 0.8.7, SQLAlchemy 0.9.7, FeinCMS 1.10.0, SVGCompress 0.51, Fiona 1.1.6, django-signup 0.5.0, pythonwhois 2.4.3. Увидели свет интересные статьи: Django-orm в поисках LEFT JOIN, Пишем простой чат на Flask, Современный Торнадо: распределённый хостинг картинок в 30 строк кода и другие, а так же стало доступно видео с EuroPython 2014.
Перейти к дайджесту

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

Современный торнадо, часть 2: блокирующие операции

Время на прочтение5 мин
Охват и читатели16K
Улучшаем наш распределённый хостинг картинок. В этой части мы поговорим о конфигурировании приложения и подключим защиту от csrf. Затем, на примере создания миниатюр картинок, научимся работать с блокирующими задачами, запускать корутины параллельно и обрабатывать возникающие в них исключения.
Читать дальше →

Практика программирования игр на python: жизнь

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


Недавно стало известно, что python признан самым популярным языком для обучения студентов в США. Я, будучи студентом Технопарка, решил не отставать от тренда, поподробнее изучить этот модный язык и заодно написать несколько постов. Для разминки я решил реализовать Conway's Game of Life. Это довольно-таки забавная «игра», в которой мы можем в некотором смысле моделировать развитие группы организмов в окружающей среде. Правила такие: делим пространство на клетки, которые могут быть либо живыми, либо пустыми. А затем на каждом шаге состояние клетки обновляем в зависимости от числа живых соседей. Например, слишком много — клетка умирает, а если нет — рождается. Можно от души экспериментировать с конфигурациями, получаются разные странные вещи, иногда корабли. Корабли (gliders) — отдельная тема, это такие группы клеток, которые изменяются и вместе с тем путешествуют в пространстве. Кроме кораблей могут образовываться и другие группы клеток с хитрыми свойствами, но о них — в Википедии.
Читать дальше →

Мега-Учебник Flask, Часть 9: Пагинация

Время на прочтение9 мин
Охват и читатели38K
Это девятая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.



Краткое повторение



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

Сегодня мы, опираясь на то, что мы сделали в прошлый раз, доведем наше приложение до ума, чтобы оно принимало и доставляло настоящий контент для наших пользователей. Сегодня мы попрощаемся с последним из наших фейковых объектов!
Хочу знать больше...

Браузерный робот на Sikuli IDE для игры MusicWars

Время на прочтение4 мин
Охват и читатели10K
игрушка на прокачку

Предыстория:

Как-то передо мной стала задача: «хочу прокачать персонажа, но из-за работы не хватает времени». Cразу решил: «я же инженер, сейчас решим задачу».
Music Wars — это новая браузерная MMORPG где вам предстоит в жесткой борьбе отстаивать свои музыкальные предпочтения. Яркая графика, нестандартная боевая система привлекут не только отъявленых меломанов, но и всех поклонников компьютерных игр.

После изучения игрушки MusicWars выяснилось, что она, как и многие браузере игры сделаны на Flash что не даёт полной возможности манипуляции. Выход есть, использовать скрипты ориентирована на программирование графического интерфейса. Я решил использовать sikuli благодаря статье «Подробнее о Sikuli в автоматизации тестирования» от Gulsom.
Читать дальше →

Мега-Учебник Flask, Часть 8: Подписчики, контакты и друзья

Время на прочтение17 мин
Охват и читатели24K
Это восьмая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.



Краткое повторение


Наш маленький микроблог потихоньку растёт, и сегодня мы затронем темы, которые необходимы для законченного приложения.

Сегодня мы немного поработаем с нашей базой данных.
Читать дальше →

Современный Торнадо: распределённый хостинг картинок в 30 строк кода

Время на прочтение3 мин
Охват и читатели36K
Впервые слышите о tornado? Слышали, но боялись асинхронности? Смотрели на него более полугода назад? Тогда я посвящаю эту статью вам.
Там будут: gen.coroutines, обработчики, роутинг, шаблоны, motor, gridfs

Python-digest #33. Новости, интересные проекты, статьи и интервью [13 июля 2014 — 20 июля 2014]

Время на прочтение3 мин
Охват и читатели11K
Очередной выпуск новостей из мира Python. Мы продолжаем собирать для вас интересную информацию о любимом языке программирования и близлежащих технологиях. Возможно, вы спросите, а что же нового в мире python произошло? А мы вам ответим, произошло много интересных событий, таких как, релизы Tornado 4.0, Widgy CMS, PyMonad, Omega: новый Web Framework Python, pycomedi 0.8. Вышли в свет интересные статьи, эффективная многопоточность в Python, разворачивание developer окружения Django на Windows 7, обоснование для применения python, 1 урок из цикла Python для Android, SQLite — компактный, быстрый и отзывчивый — выбери все три пункта! Подробнее обо всем этом можно прочитать под катом.
Перейти к дайджесту