Пользователь
0,0
рейтинг
18 декабря 2013 в 10:12

Разработка → Python на Хабре

Некоторое время назад, в силу определенных причин, мне пришла в голову мысль о том, чтобы начать изучать какой-нибудь новый язык программирования. В качестве альтернатив для этого начинания я определил два языка: Java и Python. После продолжительного метания между ними и сопутствующих нытья и долбежки головой о стену (у меня с новыми языками всегда так — сомнения, раздумья, проблема выбора и т.д.), я все-таки остановился на Python. Окей, выбор сделан. Что дальше? А дальше я стал искать материал для изучения…

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

Перечень найденного материала ниже. Там не всё — что-то мне было неинтересно, в каких-то статьях я не нашел полезной информации, но большинство статей сгруппированы по категориям, под спойлерами. Категории довольно условные, прошу за это не пинать. Надеюсь, что еще кому-нибудь, помимо меня, этот пост будет полезен. И если вы думаете, стоит ли начать изучение Python или нет — считайте это знаком, что стоит :)

Продвинутый уровень
Python изнутри: 1 | 2 | 3 | 4
Материалы продвинутого уровня по Питону
Заметки об объектной системе языка: 1 | 2 | 3
Абстрактные классы и интерфейсы
Некоторые возможности Python о которых вы возможно не знали
Сопрограммы
Как устроен namedtuple или динамическое создание типов
Итерируем все и вся
Why itertools rocks
Порядок разрешения методов в Python
Руководство по магическим методам в Питоне
Ultimate benchmark пяти с половиной способов проверить наличие атрибута объекта
Интервально-ассоциативный массив
Неочевидное поведение некоторых конструкций
Консервация объектов в Python
Устранение утечек памяти в приложении на Питоне
Memoization в Python
Сортировки: key vs cmp
Всё, что Вы хотели знать о слайсах
Неочевидная оптимизация по скорости при решении конкретной задачи на Python
Ускорение кода на Python средствами самого языка
Производительность в Python. Легкий путь
Пользовательские атрибуты в Python
Руководство к дескрипторам
Еще немного о дескрипторах в Python
Как работает yield
Пайпы, the pythonic way
Сравнение эффективности способов запуска веб-приложений на языке Python
Использование памяти в Python
О порядке поиска пакетов и модулей для импорта в Python
Организация текучих (fluent) интерфейсов в Python
Антипаттерн settings.py
Размышления о Python
Python, философия дизайна — Guido van Rossum: 1 | 2
Мысли о Python 3
Перестаньте писать классы
Тестирование и отладка
Различный практикум
API:
В основном API различных социальных сетей и сервисов.
Пишем себе немного OpenID-авторизации
Экспорт друзей VK в Google Contacts
Скачивание музыки из VK: 1 | 2
Twitter + VK: 1 | 2
Клиент для SOAP API Почты России
Jabber-to-Evernote Gateway изнутри
Скрипт проверки наличия свободных дат в посольстве
Flightstats API: Пишем свое табло прилетов с Боингами и Аэробусами
Получение любимых аудиозаписей с pandora.com
Bing + Python, поиск изображений

Чат:
Программа-мечта начинающего питоновода
WebSocket-чат на Tornado для вашего Django-проекта
Yet another python Chat client

Боты:
ICQ бот
Простой Twitter-бот
Не совсем обычный XMPP-бот: туннелирование
Пишем бота для игры «Найди отличие»
Skype-бот для голосовых конференций
Пишем бота для Twitter на основе GitHub API

Сокеты, серверы:
Сокеты в Python для начинающих
Асинхронный удар
Асинхронный http-клиент, или почему многопоточность — лишнее
Как применять Linux epoll в Python
Сервер на python для websockets
Inbox.py: самый простой SMTP-сервер
Реализация небольшого асинхронного сервера
FTP сервер с авторизацией через базу данных

Система:
Мониторинг за изменениями файловой системы
Python на примере демона уведомления о новых коммитах Git
Git. Автоматическая проверка сообщения коммита на стороне сервера с помощью Python
Скрипт для рекурсивного сравнения директорий
Python для системных администраторов
Gnome Applets. Введение
Пишем апплет для GNOME
Пишем апплет-переводчик для Gnome
Totem Gnome Applet
Переименование процессов в Python
Как написать дополнение для GIMP на языке Python
KDE4 + Python. Плазма-змей
KDE4 Plasma Desktop. Создание плазмоида
Whois: практическое руководство пользователя
Симуляция нажатий Home, End, PgUp, PgDown
Демон для удаленного управления компьютером через e-mail

Работа с консолью:
Простой консольный прогрессбар на питоне
Пишем консольный переводчик для *nix на Python

Парсинг, обработка текста:
Первые шаги в программировании на Python
Пишем свой шаблонизатор на Python
Как я учился работать с XML
Кузявые ли бутявки, т.е. пишем морфологический анализатор
Обработка Excel файлов с использованием Python
Социальный граф хабрасообщества
Regexp и Python: извлечение токенов из текста
Автоматизируем проверку трекинга почты России
Доставка свежей прессы с помощью Python прямо в почтовый ящик
Разбор кода и построение синтаксических деревьев с PLY. Основы
Частотный анализатор английских слов
Grab — python библиотека для парсинга сайтов
Документация по Grab — библиотеке для парсинга сайтов
Парсинг на Pуthon. Как собрать архив Голубятен
Генерим PDF бочками

Работа с изображениями:
Играемся с изображениями в Python
Получаем тип и размеры изображения без скачивания его целиком
Решение проблемы оперативного ресайза изображений

Геймдев:
Пишем платформер на Python, используя pygame: 1 | 2.1 | 2.2
Игра Жизнь на Python
Blender 2.49b + Python 2.6 – используем клавиатуру в своей игре
Blender 2.6 + Python 3.2 – задействуем устройства ввода в собственной игре

Python + Django:
Заметки для построения эффективных Django-ORM запросов в нагруженных проектах
Django ORM, gevent и грабли в зелени
Хостинг картинок за полчаса
Фотогалерея на Django с использованием Google Picasa в качестве хостинга
Сумбурные заметки про python и django
Пишем backend для мобильного приложения за несколько минут
Капча с помощью PIL или практический велосипед

Flask:
Мега-Учебник Flask: 1 | 2 | 3 | 4
Создание RESTful API в Google App Engine на основе Flask

Алгоритмы и структуры данных, ИИ, анализ данных:
Декодирование капчи на Python
Распознавание некоторых современных CAPTCHA
Задачка о восьми ферзях
Реализация графов и деревьев на Python
Поиск в строке. Реализация в CPython
Анализ рынка ноутбуков с помощью Python
Введение в анализ текстовой информации с помощью Python и методов машинного обучения
Введение в анализ данных с помощью Pandas
Шифр Виженера. Разбор алгоритма на Python
Латентно-семантический анализ и поиск на python
Необыкновенный способ генерации лабиринтов
PyBrain работаем с нейронными сетями на Python
Простой классификатор на PyBrain и PyQt4
Обучаем компьютер чувствам (sentiment analysis по-русски)
Определение части речи слов в русском тексте (POS-tagging)
Частотный анализатор английских слов

Вне категории:
Реализация кеша с ограничением по числу элементов на Python — решения: простое и посложнее
Случайные числа из звуковой карты
Пишем модуль расширения для Питона на C
Создаем симулятор солнечной системы
Взламываем шифры с Python
История одной оптимизации
Кодим безумный пассивный сниффер в виде модуля для Python
Рисуем волну .wav-файла
Tilt-Shift фотографии своими руками
Программный захват с вебкамеры
Распознаём изображение с токена при помощи камеры
Простой интерпретатор с нуля на Python
Руководство: пишем интерпретатор с JIT на PyPy
Играемся с гироскопом ноутбука thinkpad в linux

P.S. Если есть какие-то предложения о добавлении сюда ссылки на материал — прошу в личку. По поводу опечаток и чего-нибудь этакое — туда же.
@andymitrich
карма
42,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (63)

  • +5
    Изучил пайтон. Кодил 1.5 года на Пайтоне. Изучил Java. Теперь пишу и на том и на том — выбор технологии на чем сделать ту или иную задачу крайне необходим. Не надо останавливаться только на Пайтоне, изучайте связки и придерживайтесь парадигме ABC (Always Be Coding)
    • +1
      А я так и делаю (не останавливаюсь то есть), просто не могу учить сразу два языка программирования — надо было сделать выбор.
      P.S. Спасибо за ссылку про ABC.
    • +6
      Я думаю, что не правильно говорить «я изучил этот язык». Это не несёт никакого смысла. Вы можете прочесть документацию и пару книг, но это не является гарантом правильного и красивого кода на этом языке. Это скорее состояние постоянного совершенствования нежели статичная веха.
      И вот тут начинаются сложности, каждый раз я думаю «блин, я знаю язык лучше, чем вчера. но надо совершенствовать свои навыки!», и с таким подходом очень сложно уделять время нескольким языкам, особенно параллельно. Всё время есть ощущения незавершенности дел (как будто бросил изучение на полпути и ушел учить другое).
      • +1
        Поддерживаю.
        Особенно когда новички кидаются, то на одно, то на другое.
        Я сам недавно начал изучать Python, но также мне хочется изучить и Java.
        Но в обозримом будущем, я решил для себя углублятся и шлифовать пока только Python.
        И выбирать возможные пути развития внутри самого питона.
        Благо язык не маленький и не игрушечный, предоставляет уйму возможностей и вариантов «билда своего чара», будь то: разработка GUI, WEB, Client-Server, BigData и тп. и тд.
        Притом не гнушаюсь просматривать материалы по некоторым другим языкам например Ruby, Java…
        Особено когда идет сравнение/разбор парадигм, best-practices, патернов/идиом нескольких языков.
        Вот допустим не плохое видео (начинается с 16й минуты):
    • –32
      Прошу без обид.
      Извините, но в итоге Вы не выучили ни одного нормального языка. Что python (да, это классный язык, но костыльный, хотя он все имеет место быть), что java (тут просто нечего сказать, кроме как то, что это быдло-язык)
      Я искренне советую Вам изучить c++, а затем haskell. Оба они сделаны грамотно и полезны.
      Просто понимая утройство ОС, понимаешь, что динамическая типизация и jit — это огромный костыль. Да, создатели питона — гениальные програмисты языка, но компиляторов — у них большие проблемы с миропониманием.

      Искренне прошу извинить, если обидел кого.
      • +7
        Зря вы так.
        • +1
          Я знаю, что получу минусы, но это мое мнение, не для этого ли нужны комментарии, что бы его высказывать?
          И я попросил прощения, если обидел кого.
          • +2
            В этом вы правы, безусловно. Просто, на мой взгляд, тема чрезвычайно скользкая, чтобы говорить столь однозначно «изучите c++ и haskell».
          • +9
            Если вы не хотите кого-то обидеть, то лучше не «искренне просить прощения» в конце ругательного поста, а просто не использовать обороты типа «быдло-язык».

            Во всяком случае, подобные утверждения требуют ну очень веской аргументации.
      • +12
        Наверное зря я это пишу, но не смог удержаться.

        Позволю себе не согласиться с утверждением «c++ сделан грамотно». Или согласиться, но с оговоркой: грамотно, если исходить из требовавшейся совместимости с с. А если рассматривать с++ как вещь в себе, то уж в нём костылей-то хватает.

        А ещё точно не соглашусь с тем, что динамическая типизация — костыль. Это же просто другая идеология, имеющая свои преимущества и недостатки.

        И в довесок.
        Если не ошибаюсь, у пайтона один создатель по имени Гвидо. Искренне уважаю его, но не до такой степени, чтобы писать о нём во множественном числе.
        • НЛО прилетело и опубликовало эту надпись здесь
          • 0
            А чем плохо писать торрент-клиент на Питоне? Сетевые библиотеки там не в пример высокоуровней плюсовых. Производительность? Большую часть времени клиент будет в основном потоке ждать UI-сообщений, а в фоновом — ждать окончания операции на сокете.

            На плюсах надо писать всякие штуки, которые активно грузят проц, или где нужна параллелизация (что, как правило, совпадает с предыдущим).
            • НЛО прилетело и опубликовало эту надпись здесь
              • 0
                Ну так и скрипт будет потреблять много ресурсов.

                Просто по нынешним меркам, те 10-20 мегабайт оверхеда, которые уходят на всякие высокоуровневые штуки (кстати, запущеный питон в REPL-режиме кушает всего 2 Мб) на современных десктопах — это несерьезно.

                Вот на мобильных устройствах, там да, памяти куда меньше, да и процы слабенькие — а время отклика в тач-интерфейсе имеет куда большее значение.
              • 0
                На питоне тоже парочку (или больше?) написать успели. Ни там, ни там идеал не достигнут. Впрочем, по моему нескромному мнению, он ни в одном торрент-клиенте так и не достигнут, независимо от языка лежащего в основе.
                • НЛО прилетело и опубликовало эту надпись здесь
      • +11
        В свою очередь возмущусь столь оскорбительным выбросом по отношению к Java. Да, jit — это в некоторой степени костыль, но зато он предоставляет достаточную абстракцию от железа, что часто на практике важнее, чем работа на низком уровне и ручное управление памятью. Это очень ускоряет разработку и освобождает мозги программиста для работы над более полезными вещами.
      • +4
        Пишите весь софт сразу на ассемблере, чего уж там. Будете понимать не только устройство ОС, но и железа, а компилятор — это огромный костыль.
  • +8
    Эта статья будет каждый раз обновлятся при обновлении хабов Python и Django?
    • +1
      Я об этом не думал, но можно и так сделать. Хотя смысла я особого не вижу.
      • +3
        Ну тогда через год-другой ждем анологичную обновленную статью-архив вышеперечисленных хабов. :)
        • +9
          А ведь когда-то у Хабрахабра была собственная вики, пополняемая сообществом.
  • +2
    Потрясающе! Спасибо!
    • +1
      Пожалуйста, пользуйтесь :)
  • +4
    Спасибо за подборку!
  • 0
    Все хорошо, но для обучения с нуля не хватает системности. На отдельных статьях далеко не уехать. Тут в идеале курс пройти, их сейчас много разных. Например, курс по Python / Django: digitov.com/course/programming-python-django-courses
    • 0
      Абсолютно согласен с вами, но там в материале для новичков есть пара ссылок на статьи о курсах по Python, в частности: Уроки Python от компании Google
      • 0
        На мой взгляд, именно с уроков от Google и нужно начинать. Дальше уже можно углубляться в ту область, которая больше по душе — «наукоёмкие» вычисления (numpy + scipy), веб (django, flask ...), игры или что-нибудь еще.
        И искать уроки/материалы/курсы именно по использованию этих батареек.
        • +1
          Мое первое знакомство c питоном началось именно с гугловского класса.
          Я бы сказал что это не идеальный полноценный курс для обсалютных новичков.
          Сразуже после него я начал курс на Codecademy. Вот он и дал мне толчок для дальнейшего развития. Пройдя его, я стал считать именного его своим первым настоящим курсом по питону.
          Да там конечно не сильно углубляются во многие детали. Но для новичка, что бы резко вложить ему в голову такие элементы языка как «на тебе переменая, список, if, for, while» — самое оно. Проходится буквально за пару дней.
          А потом пошли десятки замечательных топиков на stackoverflow. самостоятельный разбор таких элементов как декораторы, генераторы, углубление в классы.
          Ну и в конце концов отшлифовал все тремя дополнительными MOOCами:
          Learn to Program: The Fundamentals
          An Introduction to Interactive Programming in Python
          Introduction to Computer Science and Programming Using Python
          • +1
            Дополню курсами от Udacity. Второй — продвинутый, как раз рассказывают и о декораторах, и о декораторах декораторов.
            Introduction to Computer Science
            Design of Computer Programs
          • 0
            Да. Про абсолютных новичков согласен.
            Просто топикстартер сказал, что он хотел выучить «еще один язык» :)
  • +4
    После продолжительного метания между ними и сопутствующих нытья и долбежки головой о стену (у меня с новыми языками всегда так — сомнения, раздумья, проблема выбора и т.д.)

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

    Урряаа, я не один такой! :D
  • 0
    Вот бы еще кто нибудь подробную карту нарисовал, с модулями, классами и их методами и свойствами. Знаю что можно это на самом питоне реализовать, но я еще не проникся его функциональностью.
  • +2
    Спасибо. Однозначно в избранное.
  • 0
    для меня, например, большая проблема придумать для себя задачу, причем ту, которую интересно выполнить
    Решение есть! Проект Эйлер — набор математических задачек, берите и решайте :)
    • 0
      У меня таких сайтов с десяток в закладках) Бесконечно решать математические задачки довольно скучно. А вот добиваться неких прикладных целей — это да.
      • +2
        О, а не поделитесь списочком?
      • +1
        присоединяюсь к просьбе поделится списком задачников.
        У самого такая же проблема придумать себе задачу для решения.
        Через некотрое время после того как заканчиваются задачки на курсах или еще где — начинает падать мотивация.
        • +6
          Вроде все собрал, хотя мог что-нибудь и не заметить :)

          Русскоязычные:
          codeforces.ru
          acm.timus.ru
          russiancodecup.ru/tasks — примеры задач с Russian Code Cup

          Англоязычные:
          www.topcoder.com — no comments :)
          uva.onlinejudge.org — знаменитый сайт по онлайн-контестам
          www.puzzleup.com — проект похожий на «Проект Эйлер»
          www.hackerrank.com — также похож на «Проект Эйлер»
          www.careercup.com — тут даны примеры задач с интервью, но, в целом, подойдет, чтобы размять мозг
          www.geeksforgeeks.org — похож на предыдущий
          learn.hackerearth.com — также есть примеры интервью с задачами, плюс где-то в Resources есть задачки
          www.interviewstreet.com/recruit2 — челленджи. Минус сайта — он платный, но есть trial-период
          codercareer.blogspot.ru — примеры задач
          www.shyamsundergupta.com/canyoufind.htm — задачи на стыке математики и программирования
          www.primepuzzles.net — аналогично предыдущему
          www.azspcs.net — оптимизационные задачи комбинаторного хар
          • +3
            checkio.org — задачи с онлайн проверкой (на python), с badges & levels
            • +1
              Онлайн проверки и badges & levels это все пустяки и не очень важно. А важно то, что можно посмотреть множество вариантов решения этой задачи другими людьми, это интересно и полезно.

  • +1
    Автору и отдельно юзеру Bringoff могу посоветовать книгу The Programmers Idea Book. Краткое содержание (его может хватить) доступно бесплатно.
  • 0
    Вы как в воду глядели. Спасибо большое.
    • 0
      Пожалуйста :)
  • 0
    Взялся изучать python, но в силу некоторых обстоятельств остановился на уровне создания парсеров. Теперь есть возможность продолжить — и тут такой пост. Спасибо, жаль нет кармы плюсануть. Еще и комменты с задачниками, курсами, их бы в пост, для полноты картины. Странно, что родной тутор никто не вспомнил The Python Tutorial
  • +3
    Можно вставлю свои 5 копеек? Знать язык программирования и его синтаксис — это хорошо.
    Но гораздо важнее — уметь решать задачи на построение алгоритмов. Поэтому, параллельно с изучением Java/Python/Whatever практикуйтесь в решении алгоритмов — поверьте, это поможет вам в будущем.

    Вот вам пример задачи, которую мне задали вчера на интервью (QA Automation Engineer)
    1. На входе у вас два list of int созданных рандомно
    2. На выходе нужно получить объедененный list в котором будут содержаться только уникальные элементы.
    3. set использовать нельзя

    Если интересно, могу набросать много задач, что мне встречались на интервью в кремниевой долине
    • +2
      очень интересно
      • +3
        Сразу прошу прощения за вставки английских слов. Мне иногда сложно подобрать русскоязычный аналог.

        OK. Вот на вскидку несколько задач из последних face2face интервью:

        1) У вас есть лист каких угодно элементов. Вам нужно вывести ТОП-N самых часто встречающихся элементов

        2) На входе у вас строка. Причем строка может быть абсолютно любая, например вот такая: «fdhjshfl;dsfs dshjds dfs sffsfdfs» — полнейшая абракадабра. Вам нужно найти палиндром:
        — необольшая подсказка. палиндромом может быть как строка, так и слово, так и комбинация букв в отдельном слове, например: «dftrghjjhgtyus» — ghjjhg — палиндром внутри «слова»

        3) На входе у вас стринг, например «I love milk» на выходе получить «milk love I» — решить в одну строку

        Иногда просят решить задачу разными способами. Смотрят на знание как встроенных функций, так и знание алгоритмов
      • +2
        Еще вспомнил очень интересную задачу, которую мне задачи во время телефонного интервью:
        1) У вас есть число в виде string вам нужно написать функцию, которая преобразует string в int

        Казалось бы элементарно. Но, все самое интересное приключилось тогда, когда меня после 2х строчек кода попросили обложить эту функцию тестами (я работаю QA Automation) и тут началось самое веселое — функцию с 2х строчек кода выросла до нескольких if и различных проверок.

        Попробуйте, это действительно интересно.
    • +1
      Проблема подобных задач в том, что искусственность подобных ограничений очень выпирает — и часто тривиально обходится.

      Например, в данном случае, я бы предложил сконкатенировать списки, отсортировать результат, и потом свернуть все повторяющиеся последовательности. Последнее на отсортированном списке делается тривиально в один проход, а сортировку использовать не запрещали. Производительность при этом будет не оптимальная, но куда лучше, чем тупой перебор — и реализация при этом очень короткая. Как-то так:

      # a, b - списки на вход, ab - результат
      ab = sorted(a + b)
      ab = [x for x, y in zip(ab, ab[1:] + [None]) if x != y]
      
      • 0
        а какие претензии ко мне? Я бы вообще через set решал, была бы моя воля )) Но те, кто задают подобные вопросы хотят посмотреть как вы работаете с алгоритмами, понимаете ли вообще что происходит behind the scene?

        Кстати, мне нравится ваше решение. На маленьких числах оно проигрывает моей имплементации по скорости, а на больших объемах хорошо работает. уже прогнал через timing )
  • +4
    Я изучал питон с книги Марка Лутца — Изучаем Python и остался очень доволен.
    • +2
      А я изучал по книжке «Hacking Secret Ciphers with Python» (доступна в pdf). Тоже рекомендую.
      • 0
        Отличная книга, присоединяюсь к рекомендации.
    • +1
      Я так же, а потом заметил, что эту книгу еще и перечитывать полезно. На разных этапах развития в ней находишь интересные для себя вещи, которые до этого пропускал мимо. Книга довольно основательная.
    • 0
      Вдобавок к этой книге порекомендую Programming Python того же автора
  • +1
    А было бы вам интересно изучать python через игру? Есть движок, вам нужно написать алгоритм поведения игрового объекта и посоревноваться с другими учениками. Вот так например habrahabr.ru/post/164229/

    за подборку спасибо — в закладки :)
    • 0
      За подборку — пожалуйста :)
      По поводу игры — возможно да, но только все ж не с пчелками ИМХО. Ничего против них не имею, но хотелось бы чего-нибудь более серьезного.
      • +1
        Хм, не понял. У пчел все серьезно — классы и объекты, наследование, событийно-ориентированная парадигма, задача коммивояжера. Концентрируясь на игре, ученик решает сложные задачи на самом деле.
  • +1
    Репозиторий с IPython-тетрадками по языку Python и структурам данных.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.