Python не только бесплатно распространяется, но и его исходный код находится в открытом доступе; при желании вы можете изменять, улучшать и расширять его. Вы можете заняться этим самостоятельно или нанять кого-нибудь, кто сделает это за вас. В любых программных продуктах с закрытым исходным кодом возможность модификации при сколько-нибудь разум-ных затратах обычно отсутствует.
Если вы впервые сталкиваетесь с миром продуктов с открытым исходным кодом, следует понимать, что вы можете не только свободно использовать и изменять Python, но и вносить свой вклад в его совершенствование (и это даже приветствуется). В зависимости от ваших обстоятельств, интересов и квалификации это может быть финансовый вклад (например, пожертвование для PSF — Python Software Foundation), участие в одной из специальных групп (SIG), тестирование и обратная связь по выпускам базовой версии Python или одного из вспомогательных модулей или применение разработок (ваших или вашей компании) в со -обществе. Конечно, уровень участия зависит только от вас; но если вы можете что-то сделать для других — это определенно стоит того. Здесь общими усилиями создается нечто весьма полезное, и у вас есть возможность внести свой вклад.
Итак, в пользу Python есть масса доводов: выразительность, удобочитаемость, богатый набор библиотек, кроссплатформенность. И распространение с открытым кодом. В чем же подвох?
1.3. Не самые сильные стороны PythonХотя Python обладает многими преимуществами, ни один язык не решает всех про-блем, так что Python не станет идеальным решением на все случаи жизни. Чтобы решить, подходит ли Python для вашей ситуации, также нужно отметить те области, в которых Python проявляет себя не лучшим образом.
1.3.1. Python не самый быстрый язык
Один из возможных недостатков Python — скорость выполнения кода. Python не является компилируемым языком. Вместо этого код сначала компилируется во внутренний байт-код, который затем выполняется интерпретатором Python. В не-которых областях (например, обработке строк с использованием регулярных вы-ражений) у Python существуют эффективные реализации, не уступающие по ско-рости любым программам C, а то и превосходящие их. Тем не менее в большинстве
случаев при использовании Python получаются программы более медленные по сравнению с такими языками, как C. Впрочем, на это следует взглянуть здраво: современные компьютеры обладают такой вычислительной мощностью, что для большинства приложений скорость разработки важнее скорости выполнения, а программы на Python обычно пишутся намного быстрее. Кроме того, Python легко расширяется модулями, написанными на C или С++; они могут использо-ваться для выполнения частей программы, создающих интенсивную нагрузку на процессор.
1.3.2. Python не является лидером по количеству библиотекХотя Python включает превосходную подборку библиотек и еще много библиотек находится в свободном доступе, Python не является лидером в этом отношении. Для таких языков, как C, Java и Perl, доступны еще б ˆольшие подборки библиотек. Иногда они предоставляют решение в тех случаях, когда в Python его нет, или пред-лагают несколько вариантов там, где Python предлагает только один вариант. Тем не менее такие ситуации обычно оказываются узкоспециализированными, а Python при необходимости легко расширяется — либо кодом Python, либо существую-щими библиотеками на C и других языках. Практически для всех повседневных вычислительных задач в библиотеке Python реализована превосходная поддержка.
1.3.3. Не проверяет тип переменных во время компиляцииВ отличие от некоторых языков, переменные в Python не служат контейнерами для своих значений, скорее они больше похожи на метки для разных объектов: целых чисел, строк, экземпляров классов и т. д. Это означает, что хотя сами объекты об-ладают типом, ссылающиеся на них переменные не привязаны к этому конкретному типу. Возможно использовать переменную x для хранения строки в одной точке про-граммы и целого числа в другой (впрочем, это не значит, что так стоит поступать): >>> x = "2"
>>> x
'2
x содержит строку "2"
>>> x = int(x)
>>> x
2
теперь x содержит целое число 2
Тот факт, что Python связывает типы с объектами, а не с переменными, означает, что интерпретатор не поможет с выявлением несовпадений типов. Если вы включили в программу переменную для хранения целого числа, Python не будет протестовать, если присвоить ей строку "two" . Программисты с опытом работы на традиционных языках считают это недостатком, потому что вы лишаетесь дополнительной про-верки в коде. Однако поиск и исправление таких ошибок обычно не создают особых проблем, а средства тестирования Python помогают устранять ошибки несоответ-ствия типов. Многие программисты Python считают, что гибкость динамической типизации с лихвой перевешивает ее недостатки.
Читать дальше