Консалтинг и автоматизация в области управления
эффективностью банковского бизнеса

Журнал ВРМ World

Знакомьтесь - Python

Python - интерпретируемый, интерактивный, объектно-ориентированный язык высокого уровня. Он поддерживает классы, модули, обработку исключений, динамические типы и очень высокоуровневые структуры данных, а также многонитевую обработку. Python объединяет замечательную выразительную мощь с простым и ясным синтаксисом. К нему существует огромное количество библиотек, предоставляющих интерфейс ко всем мыслимым системным вызовам на разных платформах; в частности, на платформе Win32 поддерживаются все вызовы Win32 API, а также COM в объеме не меньшем, чем у Visual Basic или Delphi. Кроме того, количество прикладных библиотек для Python в самых разных областях, без преувеличения, огромно (Web, базы данных, обработка изображений, обработка текста, численные методы, утилиты операционной системы, etc.) При этом практически все библиотеки бесплатны и очень высококачественны.

Python прекрасно расширяется с помощью C и C++, а на платформе Windows - также с помощью COM. Более того, интерпретатор Python элементарно встраивается в вашу программу, тем самым позволяя сделать Python языком расширения вашей системы.

Python портабелен и существует чуть ли не на всех известных платформах, начиная от handheld-компьютеров и заканчивая мейнфреймами; упомянем только Windows, все варианты UNIX (естественно, включая Linux), Mac OS, Palm OS, AS/400 и даже OS/390. При этом, в отличие от многих портабельных систем, на каждой платформе он поддерживает все характерные для данной платформы технологии (например, как уже упоминалось выше, Microsoft COM/DCOM). Более того, существует специальная версия Python для виртуальной машины Java - JPython, что позволяет интерпретатору выполняться на любой системе, поддерживающей Java, при этом классы Java могут непосредственно использоваться из Python и даже быть написанными на Python!

Для Python существует прекрасные библиотеки доступа к СУБД. На платформе Windows доступ к БД возможен через ADO; кроме того, существуют великолепные модули расширения для Python под Windows и Unix/Linux для доступа к Oracle, Sybase, Informix и MySQL. Существует также великолепный пакет mxODBC для доступа к СУБД через ODBC, также поддерживаемый на платформах Windows и UNIX/Linux.

И, наконец (как говорят англичане, "last but not least"), Python и все библиотеки к нему бесплатны и поставляются в исходных кодах. Это не означает, что Python поставляется только в исходных кодах и вы вынуждены его собирать - ничего подобного, для каждой версии существует прекрасный установщик, наподобие установщика, скажем, MS Office. Это лишь означает, что вы имеете доступ ко всем исходным кодам интерпретатора и модулей и можете модифицировать и собирать их в соответствии с вашими нуждами (например, создавая специальные версии интерпретатора или "вкомпилируя" его в вашу систему). Более того, в отличие от многих открытых систем, лицензионная политика Python никак не ограничивает его использование в коммерческих системах и не налагает никаких обязательств, кроме указания copyright.Те, кто интересуются более подробным описанием основных свойств языка, могут обратиться к статье "Python делает всю работу". Очень краткий вводный курс языка Python приведен в статье "Краткий курс языка Python", а более подробный - в Руководстве (Tutorial) автора языка Гвидо ван Россума (Guido van Rossum).

Для чего (и почему) мы используем Python

Исходно Python предполагалось использовать в качестве языка расширения системы. Главными аргументами были следующие: Python крайне легко встраивается в программу. В отличие от, например, VB, Python может взаимодействовать с системой как через механизм COM, так и через очень простой и в то же время мощный C API, что часто оказывается гораздо удобнее (существует также Delphi package для использования Python, который позволяет буквально за пару минут встроить Python в программу на Delphi и затем использовать как объекты Python в качестве "родных" объектов Delphi, так и объекты Delphi в качестве объектов Python! См. сайт Python for Delphi).

  1. Python очень прост и прозрачен и легко изучается непрограммистами. Опыт показывает, что непрограммист, знакомый с основными концепциями программирования, начинает писать (без ошибок!) нетривиальный код на Python через несколько часов обучения; программист - приблизительно через один академический час. В то же время Python далеко не примитивен и позволяет использовать в программировании весьма мощные концепции.
  2. Python прекрасно масштабируется, причем не только "вверх", т.е. в сторону более мощных систем, но и "вниз", в сторону примитивных скриптов. Это означает, что на нем удобно писать как развернутые системы объемом в тысячи строк, так и административные скрипты объемом в одну-две строки. Кроме того, в нем прекрасно поддерживаются интерфейсы и административные возможности операционной системы. В результате его можно использовать как единственный язык для всех задач расширения и обслуживания системы - от написания целых подсистем до копирования пары файлов (Примеров отсутствия масщтабирования "вверх" - хоть отбавляй; а вот интересным примером отсутствия масштабирования "вниз" может служить язык Java (не путать с JavaScript). Java - несомненно, прекрасный язык для написания больших систем; но для того, чтобы вывести "Hello, world!", необходимо написать класс, создать объект и вызвать метод! (при этом программа должна быть откомипиливана). Сравните: сprint "Hello, world!").
  3. В составе стандартной библиотеки Python поставляются модули на все случаи жизни. Практика показала, что когда необходимо решить какую-нибудь задачу, мощный и удобный инструментарий для ее решения всегда присутствует в стандартной библиотеке! Более того, это сознательная политика создателей языка; существует даже официальный лозунг - "Python comes with batteries included" (т.е. "поставляется с батарейками"). Интересующиеся могут взглянуть на список модулей стандартной библиотеки Python.

По мере использования языка выяснилось, что он может быть прекрасно использован не только для управления системой, но и для написания полноценных и весьма сложных подсистем. Великолепным примером может служить развернутая библиотека классов для обработки XML-документов (см. статью "Практика применения XML в приложениях B2P"), разработанная специалистами компании "Intersoft Lab".

В результате, на сегодняшний день в системе "Контур Корпорация", создаваемой компаний, используется гибридный подход, когда часть ядра системы и GUI клиента пишутся на C++/Delphi, а все остальное - на Python. Это обеспечивает оптимальное соотношение между надежностью, производительностью программирования, гибкостью и (что немаловажно!) сопровождаемостью системы.

Приложение 1. Поддержка XML в языке Python

XML ("Extensible Markup Language" - расширяемый язык разметки) - формат данных для обмена структурированными документами. Комбинация мощности языка и простоты использования делают Python идеальным кандидатом для обработки XML. Более того, для Python реализованы все современные XML-технологии, причем реализация для некоторых из них появилась впервые именно в Python. Ниже приведены ссылки на реализации основных XML - технологий для Python.

Приложение 2. Основные Web-ресурсы Python

Главный сайт языка Python - основной ресурс, с которого следует начинать. Отсюда вы можете скачать последние версии интерпретатора для различных платформ, дополнительную документацию и последние новости. Кроме того, на сайте прекрасно организован каталог ссылок на ресурсы Python в Web.

BeOpen PythonLabs - сайт фирмы, где базируется команда основных разработчиков Python (Guido van Rossum et al.)

Расширения Python для Win32 - сайт, посвященный расширениям Python для Win32 (Windows NT, 95/98 and 2000) (впрочем, ссылки на эти ресурсы есть и на python.org).

The Vaults of Parnassus: Python Resources - великолепно категоризованный и аннотированный каталог всевозможного программного обеспечения на Python и для Python. Около 800 различных библиотек, модулей, утилит и полномасштабных приложений в 47 категориях. Если вам нужно решить какую-то задачу, то в первую очередь обращайтесь на этот сайт - очень вероятно, что здесь вы найдете ее уже решенной или, по крайней мере, обнаружите хороший инструментарий для ее решения.

JPython - официальная домашняя страница интерпретатора JPython - Python для виртуальной машины Java.

O'Reily Python DevCenter - прекрасно организованный сайт, предназначенный для поддержки разработчиков на Python. Содержит новости, статьи, категоризованные ссылки на Web-ресурсы, документацию - и все это посвящено Python.

Автор: Я. Маркович, ведущий инженер-исследователь Отдела разработки программных систем "Intersoft Lab"