Обзор Python


Python — современный язык программирования, созданный Гвидо ван Россумом (Guido van Rossum) в 1990-е годы. Язык Python невероятно эффективен: ваши программы делают больше, чем многие другие языки, в меньшем объеме кода. Синтаксис Python также позволяет писать «чистый» код. Ваш код будет легко читаться, у вас будет меньше проблем с отладкой и расширением программ по сравнению с другими языками. Активное сообщество играет исключительно важную роль при поиске готовых решений.

Сильные стороны

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

Выразительность. Python обычно работает на более высоком уровне абстракции. Программа для загрузки веб-страницы займет всего две-три строки! Одна строка кода Python может сделать намного больше, чем одна строка кода в других языках. Преимущества более выразительного языка очевидны: чем меньше строк кода вам придется написать, тем быстрее вы завершите проект. Чем меньше строк кода содержит программа, тем меньше проблем будет с сопровождением и отладкой.

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

Удобочитаемость кода. Чем понятнее код, тем проще он в отладке, сопровождении и модификации. Главное преимущество Python в этом отношении — использование отступов. В отличие от многих других языков, Python требует, чтобы блоки кода снабжались отступами.

Удовольствие. Благодаря непринужденности языка Python и наличию встроенных инструментальных средств процесс программирования может приносить удовольствие. На первый взгляд это трудно назвать преимуществом, тем не менее, удовольствие, получаемое от работы, напрямую влияет на производительность труда.

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

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

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

Рефлексия. Процесс, во время которого программа может отслеживать и модифицировать собственную структуру и поведение во время выполнения

Автоматическое управление памятью. Python хорошо подходит для быстрой разработки приложений. Программирование приложения на Python занимает в пять раз меньше времени, чем для его реализации на С или Java, а приложение занимает впятеро меньше строк, чем эквивалентная программа на C

Стандартная библиотека. Широкий набор встроенных типов объектов и инструментов. Стандартная библиотека Python поставляется с модулями для работы с электронной почтой, веб-страницами, базами данных, функциями операционной системы, построения графического интерфейса и т. д.
Другие преимущества
Модульность. Разбиение кода программы на модули, а модули, которые, в свою очередь, могут объединяться в пакеты.

Интегрируемость. На сегодняшний день программный код на языке Python имеет возможность вызывать функции из библиотек на языке C/C++, сам вызываться из программ, написанных на языке C/C++, интегрироваться с программными компонентами на языке Java, взаимодействовать с такими платформами, как COM и .NET, и производить обмен данными через последовательный порт или по сети с помощью таких протоколов, как SOAP, XML-RPC и CORBA. Python не обособленный инструмент.

Кроссплатформенность.Python также является превосходным кроссплатформенным языком. Python работает на многих платформах: Windows, Mac, Linux, UNIX и т. д. Перенос программного кода из операционной системы Linux в Windows обычно заключается в простом копировании файлов программ с одной машины на другую. Даже интерфейсы операционных систем, включая способ запуска программ и обработку каталогов, в языке Python реализованы переносимым способом.

Сообщество. Библиотеки, готовые решения и ответы на почти все вопросы

Не самые сильные стороны Python

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

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

Python не является лидером по количеству библиотек. Хотя Python включает превосходную подборку библиотек и еще много библиотек находится в свободном доступе, Python не является лидером в этом отношении. Для таких языков, как C, Java и Perl

Не проверяет тип переменных во время компиляции. В отличие от некоторых языков, переменные в Python не служат контейнерами для своих значений, скорее они больше похожи на метки для разных объектов: целых чисел, строк, экземпляров классов и т. д. Это означает, что хотя сами объекты обладают типом, ссылающиеся на них переменные не привязаны к этому конкретному типу. Возможно использовать переменную x для хранения строки в одной точке программы и целого числа в другой (впрочем, это не значит, что так стоит поступать):
Тот факт, что Python связывает типы с объектами, а не с переменными, означает, что интерпретатор не поможет с выявлением несовпадений типов. Программисты с опытом работы на традиционных языках считают это недостатком, потому что вы лишаетесь дополнительной проверки в коде. Однако поиск и исправление таких ошибок обычно не создают особых проблем, а средства тестирования Python помогают устранять ошибки несоответствия типов. Многие программисты Python считают, что гибкость динамической типизации с лихвой перевешивает ее недостатки.

Слабая поддержка мобильных устройств. За последнее десятилетие появилось великое множество всевозможных мобильных устройств: смартфоны, планшеты, планшетофоны, хромбуки... Новые мобильные устройства повсюду, и на них работают самые разные операционные системы. Python не принадлежит к числу сильных игроков в этом секторе. Варианты запуска Python на мобильных устройствах не всегда просты (хотя они и существуют), а при попытках использования Python для написания и распространения коммерческих приложений начинаются проблемы.

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

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

Многопоточность позволяет запустить задачи по вводу/выводу в фоновом режиме без оста­новки выполнения основного потока. Например, основной цикл графиче­ского пользовательского интерфейса ждет события (ввод с клавиатуры или нажатие мыши), но сам код должен в это время выполнять другие задачи.

GIL ограничивает выполнение программы таким образом, что в интерпретаторе выполняется только один поток за определенное время. Это правило было создано с целью не допустить возникновения состояния "гонки", но, к сожалению, оно также ограничивает масштабирование приложения. Хотя Python полностью поддерживает многопоточное программирование, части интепретатора, реализованные на C, не полностью потокобезопасны и не позволяют осуществлять полностью конкурентное выполнение. GIL мешает многопоточности быть хорошим решением для масштабируемости, но в python существуют альтернативные подходы реализации полноценной многопоточности.

Интерпретатор Python

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

Высокоуровневый язык программирования предполагает платформо независимость и высокий уровень абстракции (возможность краткое описывать сложные структуры данных).

Транслятор – системная программа, осуществляющая перевод прикладной программы, написанной программистом на ЯПВУ в язык машинных кодов и ее выполнение. Существуют два вида трансляторов:

  • интерпретаторы;

  • компиляторы.

Интерпретатор читает очередную команду программы и сразу ее выполняет, не переводя всю программу в машинный код.

Компилятор читает всю программу целиком, делает ее перевод и создает законченный вариант программы на «машинном языке», который затем и выполняется.

Когда вы запускаете программу, практически незаметно для вас Python сначала компилирует ваш исходный текст (инструкции в файле) в формат, известный под названием байт-код (файл с расширением .pyc). Байт-код – это низкоуровневое, платформо независимое представление исходного текста программы. Интерпретатор. Байт-код передается механизму под названием виртуальная машина Python (PVM). Фактически PVM – это просто большой цикл, который выполняет перебор инструкций в байт-коде, одну за одной, и выполняет соответствующие им операции.
Производительность
Первое, что бросается в глаза, – это отсутствие этапа сборки, программный код может запускаться сразу же, как только будет написан. Второе отличие интерпретатора Python: байт-код не является двоичным машинным кодом.

По этой причине программный код на языке Python не может выполняться так же быстро, как программный код на языке C или C++. Обход инструкций выполняет виртуальная машина, а не микропроцессор. В результате Python способен обеспечить скорость выполнения где-то между традиционными компилирующими и интерпретирующими языками программирования.
Альтернативные реализации Python
Python - это реализация на языке С c интерпретатором байт-кода, оригинальный Python, стабильный.

Jython - это реализация на языке Java c интерпретатором байт-кода, цель состоит в том, чтобы позволить программам на языке Python управлять Java-приложениями, точно так же как CPython может управлять компонентами на языках C и C++. Эта реализация имеет бесшовную интеграцию с Java.

IronPython - это реализация Microsoft на языке C#, предназначенная для тесной интеграции с платформой .NET.