Фактически роли Python как универсального языка практически безграничны: вы можете использовать его для чего угодно, начиная с разработки веб-сайтов и игровых программ и заканчивая управлением роботами и космическими аппаратами.
Системное программирование
Встроенные интерфейсы Python для служб операционных систем делают его идеальным средством написания переносимых и сопровождаемых инструментов и утилит администрирования систем (иногда называемых инструментами командной оболочки). Программы Python могут производить поиск в файлах и деревьях каталогов, запускать другие программы, организовывать параллельную обработку с помощью процессов и потоков и т.д.
Стандартная библиотека Python поставляется с привязками POSIX и поддерживает все обычные инструменты ОС: переменные среды, файлы, сокеты, конвейеры, процессы, многопоточность, сопоставление с образцом в виде регулярного выражения, аргументы командной строки, интерфейсы стандартных потоков данных, модули запуска команд оболочки, развертывание имен файлов, утилиты сжатия файлов, средства разбора XML и JSON, обработчики файлов CSV и т.д. Вдобавок основная масса системных интерфейсов Python спроектирована так, чтобы быть переносимыми; например, запуск сценария, который копирует деревья каталогов, обычно не требует изменений на всех главных платформах Python. Реализация Stackless Python, используемая в EVE Online, также предлагает улучшенные решения для удовлетворения требований многопроцессорной обработки.
Графические пользовательские интерфейсы
Простота и быстрота разработки в Python также делают его подходящим вариантом для программирования настольных графических пользовательских интерфейсов. В состав Python входит стандартный объектно-ориентированный интерфейс к Tk GUI API под названием tkinter (Tkinter в 2.Х), который позволяет программам Python реализовывать переносимые графические пользовательские интерфейсы с присущим данной системе внешним видом и поведением. Графические пользовательские интерфейсы Python/tkinter выполняются в неизменном виде в средах Microsoft Windows, X Window (в Unix и Linux) и Mac OS (Classic и OS X). Бесплатный пакет расширения PMW добавляет в инструментальный набор tkinter более развитые
виджеты(графические элементы). Кроме того, API-интерфейс для построения графических пользовательских интерфейсов wxPython, основанный на библиотеке C++, предлагает альтернативный инструментальный набор для конструирования переносимых графических пользовательских интерфейсов в Python.
Высокоуровневые инструментальные наборы вроде Dabo построены поверх базовых API-интерфейсов, подобных wxPython и tkinter. С подходящей библиотекой вы можете также применять поддержку графических пользовательских интерфейсов из других инструментальных наборов в Python, например, Qt с PyQt, GTK с PyGTK, MFC с PyWin32, .NETс IronPython и Swinge Jython (Java-версия Python) или JPype. Для приложений, выполняющихся в веб-браузерах либо имеющих простые требования к пользовательскому интерфейсу, веб-фреймворки Jython и Python и серверные CGI-сценарии, рассматриваемые в следующем разделе, предоставляют дополнительные варианты создания пользовательских интерфейсов.
Написание сценариев для Интернета
В состав Python входят стандартные модули для Интернета, которые позволяют программам Python выполнять широкий спектр задач, связанных с сетями, в клиентском и серверном режимах.
- Сценарии могут взаимодействовать через сокеты;
- Извлекать информацию из форм, отправленных серверными CGI-сценариями; передавать файлы посредством FTP;
- Разбирать и генерировать документы XML и JSON; посылать, получать, составлять и анализировать сообщения электронной почты;
- Извлекать веб-страницы по URL-адресам;
- Разбирать HTML-содержимое извлеченных веб-страниц;
- Взаимодействовать через протоколы XML-RPC, SOAP и Telnet, а также многое другое.
Библиотеки Python делают решение таких задач удивительно простым.
Кроме того, в веб-сети доступен крупный набор сторонних инструментов для Интернет-программирования на Python. Например, система HTMLGen генерирует HTML-файлы из описаний на основе классов Python, пакет mod_python эффективно запускает Python на веб-сервере Apache и поддерживает серверный механизм шаблонов с помощью Python Server Pages, а система Jython обеспечивает бесшовную интеграцию Python/Java и поддерживает написание серверных апплетов, которые запускаются на стороне клиента.
Вдобавок пакеты развитых фреймворков веб-разработки для Python, такие как Django, TurboGears, web2py, Pylons, Zope и WebWare, поддерживают быстрое конструирование полнофункциональных и пригодных для производственного применения вебсайтов на Python. Многие из них включают средства объектно-реляционного отображения, архитектуру “модель-представление-контроллер ” (Model-View-Controller), написание серверных сценариев и шаблонов и поддержку AJAX, чтобы предлагать полные решения веб-разработки производственного уровня.
Недавно Python был расширен с целью охвата насыщенных Интернет-приложений(rich Internet application — RLA) посредством таких инструментов, как Silverlight в IronPython и pyjs (известный еще и под названием pyjamas') и его компилятора Python в JavaScript, фреймворк AJAX и набор виджетов. С помощью Арр Engine и других механизмов, рассматриваемых чуть ниже “Программирование для баз данных” , Python был перемещен в облачные вычисления.
Там, где лидирует веб-сеть, Python быстро догоняет.
Интеграция компонентов
Способность Python расширяться и встраиваться в системы С и C++ делает его удобным в качестве гибкого связующего языка для сценарного описания поведения других систем и компонентов. Скажем, интеграция библиотеки С в Python позволяет Python проверять наличие и запускать компоненты библиотеки, а встраиваниеPython в какой-то продукт делает возможным кодирование настроек на месте эксплуатации без потребности в перекомпиляции целого продукта (или вообще поставки его исходного кода).
Инструменты вроде генераторов кода SWIG и SIP могут автоматизировать порядочную часть работы по связыванию скомпилированных компонентов с Python для использования в сценариях, а система Cython позволяет программистам смешивать код Python и языков семейства С. Более масштабные фреймворки, подобные поддержке СОМ в Python для Windows, основанной на Java реализации Jython и основанной на .NET реализации IronPython, предоставляют альтернативные способы написания сценариев для компонентов. Например, в среде Windows сценарии Python могут задействовать фреймворки для взаимодействия с Word и Excel, доступа к Silverlight и т.п.
Программирование для баз данных
Для традиционных требований относительно баз данных в Python предусмотрены интерфейсы ко всем распространенным системам реляционных баз данных — Sybase, Oracle, Informix, ODBC, MySQL, PostgreSQL, SQLite и т.д. В мире Python также определен переносимый API-интерфейс к базам данных для доступа к системам баз данных SQL из сценариев Python, который выглядит одинаково в различных системах баз данных. Скажем, из-за того, что интерфейсы поставщика реализуют переносимый API-интерфейс, сценарий, написанный для работы с бесплатной системой MySQL, будет практически без изменений работать с другими системами (вроде Oracle); обычно понадобится лишь заменить лежащий в основе интерфейс поставщика. Встроенный внутрипроцессный механизм баз данных SQL, SQLite, является стандартной частью Python, начиная с версии 2.5, и поддерживает как прототипирование, так и основные потребности программ в хранении данных.
Что касается области, не связанной с SQL, то стандартный модуль Python под названием pickle предлагает простую систему постоянства объектов, которая позволяет программам легко сохранять и восстанавливать объекты Python из файлов и подобных им объектов. В веб-сети вам удастся отыскать сторонние системы с открытым кодом ZODB и Durusy которые предоставляют законченные системы объектноориентированных баз данных для сценариев Python. Также вы найдете системы SQLObject и SQLAkhemy, реализующие средства объектно-реляционного отображения (objectrelational mapper — ORM), которые сопоставляют модель классов Python с реляционными таблицами. Наконец, вы обнаружите РуMongo — интерфейс к MongoDB, высокопроизводительной, с открытым кодом, отличной от SQL документной базе данных в стиле JSON. Данные в MongoDB хранятся в структурах, очень похожих на собственные списки и словари Python, текст которых может анализироваться и создаваться спомощью стандартного библиотечного модуля Python по имени json.
Есть также системы, предлагающие более специализированные способы хранения данных, в том числе Арр Engine от Google, которая моделирует данные с помощью классов Python и обеспечивает всестороннюю масштабируемость, а также дополнительно появляющиеся варианты облачного хранения, в частности Azure, PiCloud, OpenStack и Stackato.
Быстрое прототипирование
Для программ Python компоненты, написанные на Python и С, выглядят одинаковыми. В итоге становится возможным прототипирование систем изначально на Python с последующим переносом избранных компонентов в компилируемые языки типа С или C++ для поставки. В отличие от ряда инструментов прототипирования Python не требует полного переписывания после того, как прототип был сформирован. Ради облегчения сопровождения и использования те части системы, которым не требуется эффективность языков вроде C++, могут оставаться реализованными на Python.
Численное и научное программирование
Хорошо заметное здесь высокопроизводительное расширение численного программирования для Python, NumPy, включает такие расширенные инструменты, как объекты массивов, интерфейсы к стандартным математическим библиотекам и многое другое. За счет интеграции Python с численными процедурами, ради высокой скорости написанными на компилируемом языке, расширение NumPy превращает Python в сложно устроенный, но легкий в применении инструмент численного программирования. Он часто способен заменить существующий код, который написан на традиционных компилируемых языках, таких как FORTRAN или C++.
Дополнительные инструменты численного программирования для Python поддерживают анимацию, трехмерную визуализацию, параллельную обработку и т.д. Например, популярные расширения SciPy и ScientificPython предлагают дополнительные библиотеки инструментов для научного программирования и в качестве основного компонента используют NumPy. Реализация РуРу языка Python также получила поддержку в области численного программирования, отчасти потому, что громоздкий алгоритмический код, характерный для этой области, может выполняться в РуРу значительно быстрее, зачастую в 10-100 раз.
И еще: игры, изображения, глубинный анализ данных, роботы, электронные таблицы Excel...
Вы обнаружите инструменты, которые позволят использовать Python в следующих ситуациях:
- программирование игр и создание мультимедиа-содержимого с помощью pygame, cgkit, pyglet, Ру Soy, PandaBD и т.п.;
- взаимодействие через последовательные порты в Windows, Linux и других средах с помощью расширения Ру Serial;
- обработка изображений посредством PIL и его новейшего ответвления Pillow, PyOpenGL, Blender, Maya и т.д.;
- программирование контроллеров для роботов с применением инструментального набора PyRo;
- обработка естественного языка с помощью пакета NLTK;
- инструментальное оснащение плат Raspberry Pi и Arduino;
- мобильные вычисления посредством переносимых версий Python для платформ Google Android и Apple iOS;
- программирование функций и макросов для электронных таблиц Excel с использованием дополнений PyXLL или DataNitro;
- обработка меток содержимого медиафайлов и метаданных с помощью PyMedia, ID3, PIL/Pillow и т.д.;
- программирование искусственного интеллекта с применением библиотеки нейронных сетей PyBrain и инструментального набора машинного обучения Milk;
- программирование экспертных систем посредством PyCLIPS, Pyke, Pyrolog и pyDatalog;
- мониторинг сети с использованием системы zenoss, написанной и настраиваемой с помощью Python;
- проектирование и моделирование, подкрепленное сценариями Python, с использованием PythonCAD, PythonOCC, FreeCAD и т.д.;
- визуализация данных с применением Mayavi, matplotlib, VTK, VPython и т.д.;
- разбор XML-содержимого с помощью библиотечного пакета xml, модуля xmlrpclib и сторонних расширений;
- обработка файлов JSON и CSV с использованием модулей json и csv;
- глубинный анализ данных посредством фреймворка Orange, пакета Pattern, Scrapy и специального кода.
С помощью программы PySolFC вы даже можете раскладывать пасьянс. И, разумеется, вы можете писать специальные сценарии в областях, не настолько переполненных модными словечками, чтобы выполнять повседневное администрирование системы, обрабатывать электронную почту, управлять библиотеками документов и медиаданных и т.п.
Несмотря на широкое практическое применение, многие из этих специфических областей по большому счету представляют собой просто очередные случаи проявления роли интеграции компонентов, исполняемой Python. Добавление его в качестве внешнего интерфейса к библиотекам компонентов, написанных на компилируемом языке вроде С, делает Python удобным для написания сценариев в самых разных предметных областях. Как универсальный язык, который поддерживает интеграцию, Python обладает широкой применимостью.