понедельник, 6 июня 2016 г.

 Мой путь из C++ в Python

Этот текст кратко поясняет как мне удалось быстро начать писать программы на Python. Все, что описывается, основывается на личном опыте и ощущениях, и поэтому может не описывать тот самый единственно верный путь. Тем не менее, изложенная информация агрегирует знания, которые пришлось собрать, чтобы создавать собственные проекты на Python. Для начала не огромные высокопроизводительные системы, но и на C++ вы тоже не сразу стали выдавать шедевры. Если у кто-то посчитает, что тут не хватает важных вещей, о который обязательно нужно сказать, то в комментариях можно это отметить.

Начинать разработку конечно нужно с установки интерпретатора. Повезло тем, у кого установлена операционная система семейства Linux — тогда вопрос установки скорее всего не стоит и интерпретатор Python уже установлен. Если Python не установлен, то инсталлятор для всех популярных ОС совершенно бесплатно можно скачать с официального сайта.

После этого можно попробовать запустить Python, но никакой среды разработки вы не увидите, а увидите интерактивную консоль:

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

Хотя этот вопрос и не такой популярный как про выход из Vim, но сразу подскажу, что выйти из интерактивного режима можно написав quit().

Если очень хочется какую-нибудь среду разработки, то PyCharm мне показалось наиболее удобной (помимо платной версии есть и Community Edition). Под Windows конечно еще есть привычная Visual Studio с Python Tools.

С инструментами покончено, время понять какие важные отличия от C++ нужно сразу усвоить. Во-первых, Python использует duck typing. Это означает, что если в какой-то момент выполнения программы объект имеет все свойства класса, то он в этот момент считается объектом этого класса. Если сравнивать с C++, то ближе всего к этому концепты (Concepts), которые кстати не попадут в C++17.

If it looks like a duck, swims like a duck and quacks like a duck, then it probably is a duck.

Во-вторых, многопоточности в Python нет. Если вы будете мучить Google на эту тему, то скорее всего наткнетесь на GIL (Global Interpreter Lock), но это совсем не та многопоточность, к которой привыкли C++ разработчики. Схематично принцип такой многопоточности показан на картинке — тут хорошо видно, что параллельно никакие потоки не выполняются, даже если у вас многоядерный процессор:

GIL description

Полноценная многопоточность обычно реализуется за счет запуска отдельных процессов. Для начала это все, что нужно знать про многопоточность в Python.

Остальные вопросы, которые часто возникают у новичков, и ответы на них можно найти на StackOverflow.com в секции с часто задаваемыми вопросами. Стоит просмотреть первых штук 50.

Из этих вопросов вы узнаете, что файлы на Python имеют расширение py и их стоит начинать со следующей строки:

#! /usr/bin/env python
Это позволяет запускать скрипт в виртуальных окружениях с разными версиями Python. Сам же Python выполняет файл последовательно с первой строки и далее. При этом нет никакой функции main, как в C или C++. Хотя часто в скриптах встречается строка if __name__ == "__main__", которую ошибочно можно принять за точку входа. Но нет, если за пределами этого выражения будет другой код, то он также выполнится. А само выражение удобно использовать для создания и запуска тестов в подключаемых модулях.

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

#! /usr/bin/env python
# vim: set fileencoding=utf-8 :
""" Hello world in Python """

def main():
    print("Hello world!")

if __name__ == "__main__":
    main()

Книги по теме:

  1. Марк Лутц. Программирование на Python. Том 1
  2. Марк Лутц. Программирование на Python. Том 2

Комментировать в ВКонтакте