С ростом вычислительной мощи компьютерной техники изменились требования, предъявляемые к языкам программирования. В приложениях, не особенно критичных к скорости выполнения, стали применяться интерпретируемые языки программирования. Также толчок к росту популярности таких языков дал Web, где часто важнее скорость разработки приложений, чем скорость их выполнения. Об одном из таких языков программирования Python и пойдет речь в данной статье.
Сначала немного истории. Python был создан в начале 90-х сотрудником голландского института CWI Гвидо ван Россумом (Guido van Rossum), который участвовал в разработке языка АВС. Язык предназначался для замены языка BASIC, который тогда применялся при обучении программированию. Гвидо написал его дома (наверно, со скуки он был тогда холостяком, как и Б.Г. во время создания BASIC :-)), заимствовав наработки для языка АВС. Далее все просто: язык начал свободно распространятся через Интернет, и программистам язык понравился. Но если Вы думаете, что название произошло от вида пресмыкающихся, то ошибаетесь. В ту пору был очень популярен комедийный сериал «Воздушный цирк Монти Пайтона», вот в честь этого самого Пайтона и был назван язык. Вообще, по истории создания языка тоже можно было бы снять хороший сериал, но я думаю, что читателя в первую очередь больше всего интересует, в чем же его примечательность.
Python язык более высокого уровня, чем С, С++ и Pascal. С 1991 года является полностью объектно-ориентированным.
Самое главное, и под данным заявлением подпишутся тысячи программистов, это то, что программы, написанные на Python, очень читабельны. Вспомните, как тяжело иногда бывает разобрать код вами же самими написанной программы, и вы поймете, о чем это я. Здесь же, наоборот, все сделано для того, чтобы программа была понятна и через день, и через год. Язык обладает четким и последовательным синтаксисом, но это означает, что многие рутинные операции приходится решать вручную.
Следующая немаловажная черта языка это то, что с самого начала он задумывался как расширяемый. Это значит, что доступен исходный код интерпретатора (написан на С), и любой программист может как принять участие в развитии языка, так и использовать его для своих нужд (например, встраивая его в приложение).
Наличие небольшого числа встроенных функций с лихвой окупается большим числом подключаемых модулей, которые написаны и на С, и на самом Python. В качестве примера приведу следующие модули:
Tkinter построение приложений с использованием графического пользовательского интерфейса на основе библиотеки Tk;
socket предоставляет объектно-ориентированный интерфейс к функциям сетевых библиотек ОС. Поддерживаются все виды сокетов и все сетевые протоколы, в т.ч. TCP/IP (включая IPv6);
cgi модуль для написания CGI-скриптов;
Scientific Python для научных расчетов;
OpenGL для графического моделирования двух- и трехмерных объектов;
mysql, msql для доступа к соответствующей базе данных.
Как видите, даже этот далеко не полный список охватывает практически все сферы применения современных языков программирования. В Интернете по адресу http://www.vex.net/parnassusсуществует каталог модулей под поэтичным именем Парнас. Существуют также модули, позволяющие встраивать код в Web-сервер Apache.
Теперь давайте рассмотрим особенности языка.
В нем не требуется объявлять переменные, как, например, в Pascal или С++ в этом он напоминает Бейсик и Perl. Переменные создаются при их первой инициализации, т.е. тип определяется типом присваиваемого значения, но если вам необходимо в ходе задачи сменить тип переменной, вы можете просто ее переназначить. При этом значение можно присвоить сразу нескольким переменным.
Например:
Поменять местами значения переменных ничего не стоит:
Для выделения блоков операторов не надо никаких конструкций типа begin …end или фигурных скобок; здесь все гораздо проще они выделяются пробелами или табуляцией:
Поэтому хочешь не хочешь, а выдерживать стиль придется здесь не получится все операторы слепить в кучу (против чего борются во всех других языках программирования), программа просто не будет работать.
В языке имеется ряд встроенных структур списки (list), словари (dictionary) и тьюплы (tuple). В двух словах о каждом из этих типов.
Тьюплы очень напоминают массивы в других языках программирования, элементами могут быть как переменные любого типа, так и объекты. Но в отличие от массива, значения тьюпла изменять нельзя. Обратиться к любому элементу можно по индексу:
Добавить новый элемент можно так
Списки, в отличие от тьюплов, можно изменять; чтобы создать список, нужно просто перечислить значения через запятую и заключить все в квадратные скобки (списки могут быть вложенными):
Обращаться к элементам можно по индексу а[1], но можно использовать и сечения, указывая начальный и конечный индекс: а[3:5], a[2:], a[:5], a[-2].
Словарь напоминает хеш в языке Perl или record в Pascal. Здесь элементами являются пары "ключ"-"значение". В поле ключ используется константа (как правило строка), служащая для индексирования некоторого соответствующего ему значения, которое можно изменять. Создается путем перечисления ключ:значение через запятую в фигурных скобках.
Для добавления новой пары достаточно присвоить паре с новым ключом соответствующее значение:
Python не поддерживает работу с указателями и динамической памятью. В этом он похож на Java. Для обеспечения большей надежности и простоты они не были включены в язык.
Для определения функции используется ключевое слово def. Вообще, если вы хоть что-то знаете о функциях, этого будет достаточно.
Пример вычисления числа Фибоначчи:
Вызов функции:
Ключевое слово return останавливает работу функции и возвращает ее значение в качестве результата.
При вызове функций можно использовать именованные значения (Keyword Arguments) и значения по умолчанию (Default Argument Values), но эти подробности выходят за рамки данной статьи.
Так как Python является объектно-ориентированным языком, то, естественно, в нем можно создавать классы (с помощью ключевого слова class), но поначалу можно обойтись и без них. В языке предусмотрено большинство управляющих структур, доступных в других языках, это циклы for, while, условный оператор if (правда, нет оператора case, но он легко эмулируется с помощью вышеперечисленных). С помощью блоков try-except-else и try-finally реализован перехват исключений, а с помощью оператора raise можно возбуждать свои. С версии 2.0 полностью поддерживается кодировка Unicode. В языке реализована работа с регулярными выражениями на уровне языка Perl, т.е. вы получаете удобный инструмент для работы со строками. Обращает внимание также интересная концепция поиска без учета регистра символов: вы можете предоставить собственное описание того, как каждый байт (т.е. символ) должен интерпретироваться при сравнении.
В Python реализован интерактивный режим работы. Это когда вы в командной строке вводите рython, а затем операторы языка, после чего программа сразу же выполняется (Рис. 1):
Интерактивный режим при взаимодействии с MySQL показался мне в некоторых случаях даже более удобным, чем используемый в самой базе данных.
Да, файлы с текстом программы на Python можно создавать в любом обычном текстовом редакторе (наподобие блокнота), при этом расширение файла измените на .py. На Unix-подобных системах расширение не играет такой роли, поэтому если хотите, чтобы программа выполнялась, первой строкой впишите:
Кстати, о платформах, на которых может жить наш зверь. Создатели языка сделали то, что нам обещали еще в Java, т.е. поддержку всех имеющихся платформ. Более того, помимо так называемого СPython, написанного на С, есть еще реализация JPython, который состоит из интерпретатора Python, написанного на Java, и компилятора из Python в код Java, что позволяет писать апплеты на Питоне, а не на Джава, что намного легче и что избавляет от необходимости изучать двух языков программирования.
В заключение хочу рассказать, где и что. Счастливым обладателям современного дистрибутива Linux, скорее всего, не придется лазить по Интернету в поисках дистрибутива и документации и то и другое уже установлено на их компьютере (Рис. 2, 3). Более того, в /usr/share/doc/python вы можете найти и примеры программ, написанных на Python (Рис. 4). А живет наше пресмыкающееся в Интернете по адресу http://www.python.org(Рис. 5). Советую в разделе Documentation скачать сразу всю документацию единым архивом (Рис. 6, 922 Кб). После распаковки архива вы получите 8 Мб текста, осилив которые, вы перестанете беспокоиться за свое будущее: даже если не захотите программировать на Python, сможете устроиться куда-нибудь переводчиком :-). А в разделе Comparisons для сомневающихся доходчиво объяснят, почему вы должны программировать именно на Python. Наконец, зайдя в Download, найдете сам дистрибутив для большинства платформ. И еще. Более года назад, когда я впервые обратил внимание на этот язык, в рунете информации по нему практически не было (уанет это, по-моему, скорее диагноз, чем web-сектор). Теперь же, набрав в строке браузера http://www.python.ru, я был приятно удивлен, когда мой запрос достиг цели (Рис. 7). Ресурс, видать, еще молодой, в основном содержит ссылки на статьи на других сайтах, но есть и свои материалы. И еще: на сайте http://cache.girmet.ru/~nv/pythonя нашел неплохой перевод части документации по Python, так что отправная точка путешествия по Интернету для вас может быть именно здесь (особенно если с англицким не очень :-)).
А теперь пару слов о том, кто. Я не думаю, что матерые программисты будут толпами переходить на новый язык программирования, хотя, учитывая легкость в освоении и скорость при написании новых программ, отказываться от его использования не стоит. Например, за один вечер я освоил основные операторы и функции, благо создатели не старались выдумать что-нибудь этакое, а в следующий вечер уже создавал простейшие сетевые программы. А вот пользователям, которые не являются программистами по специальности, но используют компьютеры в своей работе (учителя, математики, физики) следовало бы обратить внимание на диковинного зверя. Пора потеснить BASIC и Pascal. Так же (это уже моя собственная теория), как стихи каких-нибудь поэтов нравятся одним, но совсем не нравятся другим, так и каждый язык программирования отражает образ мышления, если хотите, склад характера своего создателя. Мы имеем легкий, но иногда нелогичный VB (создавала-то его целая толпа разработчиков), скрупулезный Pascal, серьезный С, мой любимый Perl, девиз которого: «Всегда найдется другой путь решения задачи». Так может, Python это как раз то, что вы искали?