Математический анализ. 3е издание
Скачать 4.86 Mb.
|
40 Глава 1. Python в вопросах и ответах но, лучше использовать для описания быстрого и гибкого способа раз работки, который поддерживается языком Python, а не для описания прикладной области программирования. Все хорошо, но есть ли у него недостатки? После 15 лет работы с языком Python и 10 лет преподавания единст венный недостаток, который мне удалось обнаружить, – это скорость выполнения программ, которая не всегда может быть такой же высо кой, как у программ, написанных на компилирующих языках про граммирования, таких как C или C++. Подробнее о концепциях реализации мы поговорим ниже в этой кни ге. В двух словах замечу, что в современной реализации Python ком пилирует (то есть транслирует) инструкции исходного программного кода в промежуточное представление, известное как байт+код, и затем интерпретирует этот байткод. Байткод обеспечивает переносимость программ, поскольку это платформонезависимый формат. Однако, из за того что Python не создает двоичный машинный код (например, ма шинные инструкции для микропроцессора Intel), некоторые програм мы на языке Python могут работать медленнее своих аналогов, напи санных на компилирующих языках, таких как C. Будет ли вас когданибудь волновать разница в скорости выполнения программ, зависит от того, какого рода программы вы пишете. Python многократно подвергался оптимизации, и в отдельных прикладных областях программный код на этом языке отличается достаточно вы сокой скоростью выполнения. Кроме того, когда в сценарии Python де лается чтонибудь «значительное», например обрабатывается файл или конструируется графический интерфейс, ваша программа факти чески выполняется со скоростью, которую способен дать язык C, пото му что такого рода задачи решаются компилированным с языка С про граммным кодом, лежащим в недрах интерпретатора Python. Гораздо важнее, что преимущество в скорости разработки порой важнее поте ри скорости выполнения, особенно если учесть быстродействие совре менных компьютеров. Тем не менее, даже при высоком быстродействии современных процес соров остаются такие области, где требуется максимальная скорость выполнения. Реализация математических вычислений и анимацион ных эффектов, например, часто требуют наличия базовых вычисли тельных компонентов, которые решают свои задачи со скоростью язы ка C (или еще быстрее). Если вы работаете как раз в такой области, вы все равно сможете использовать Python, достаточно лишь выделить из приложения компоненты, требующие максимальной скорости рабо ты, в виде компилированных расширений и связать их системой сце нариев на языке Python. В этой книге мы не будем обсуждать расширения слишком подробно, но это один из примеров, когда Python может играть упоминавшуюся Кто в наше время использует Python? 41 выше роль языка управления. Типичным примером такой двуязыч ной стратегии может служить расширение NumPy, содержащее реали зацию математических вычислений для Python; благодаря комбиниро ванию компилированных и оптимизированных библиотек расширения с языком Python, NumPy превращает Python в мощный, эффективный и удобный инструмент математических вычислений. Возможно, вам никогда не придется создавать подобные расширения, но вы должны знать, что в случае необходимости они могут предоставить в ваше рас поряжение мощный механизм оптимизации. Кто в наше время использует Python? К моменту, когда я пишу эти строки (2007 год), наиболее правдоподоб ной оценкой числа пользователей Python является число, близкое к 1 миллиону человек во всем мире (с небольшой погрешностью). Эта оценка основана на различных статистических показателях, таких как количество загрузок и результаты опросов разработчиков. Дать более точную оценку достаточно сложно, потому что Python является откры тым программным обеспечением – для его использования не требуется проходить лицензирование. Более того, Python по умолчанию включа ется в состав дистрибутивов Linux, поставляется вместе с компьютера ми Macintosh и некоторыми другими программными и аппаратными продуктами, что существенно искажает оценку числа пользователей. Вообще же количество пользователей Python значительно больше и вокруг него сплотилось очень активное сообщество разработчиков. Благодаря тому что Python появился более 15 лет тому назад и полу чил широкое распространение, он отличается высокой стабильностью и надежностью. Python используется не только отдельными пользова телями, он также применяется настоящими компаниями для созда ния продуктов, приносящих настоящую прибыль. Например: • Компания Google широко использует Python в своей поисковой сис теме и оплачивает труд создателя Python. • Служба коллективного использования видеоматериалов YouTube в значительной степени реализована на языке Python. • Популярная программа BitTorrent для обмена файлами в пиринго вых сетях (peertopeer) написана на языке Python. • Такие компании, как Intel, Cisco, HewlettPackard, Seagate, Qual comm и IBM используют Python для тестирования аппаратного обеспечения. • Такие компании, как Industrial Light & Magic, Pixar и другие ис пользуют Python в производстве анимационных фильмов. • Компании JPMorgan Chase, UBS, Getco и Citadel применяют Python для прогнозирования финансового рынка. • NASA, Los Alamos, Fermilab, JPL и другие используют Python для научных вычислений. 42 Глава 1. Python в вопросах и ответах • iRobot использует Python в разработке коммерческих роботизиро ванных пылесосов. • ESRI использует Python в качестве инструмента настройки своих популярных геоинформационных программных продуктов под ну жды конечного пользователя. • NSA использует Python для шифрования и анализа разведданных. • В реализации почтового сервера IronProt используется более 1 мил лиона строк программного кода на языке Python. • Проект «ноутбук каждому ребенку» (One Laptop Per Child, OLPC) строит свой пользовательский интерфейс и модель функционирова ния на языке Python. И так далее. Пожалуй, единственное, что объединяет все эти компа нии, – это то, что для решения широкого спектра задач прикладного программирования используется язык программирования Python. Универсальная природа языка обеспечивает возможность его приме нения в самых разных областях. Фактически, с определенной долей уверенности можно утверждать, что Python так или иначе использует ся практически каждой достаточно крупной организацией, занимаю щейся разработкой программного обеспечения, – как для решения краткосрочных тактических задач, так и для разработки долгосроч ных стратегических проектов. Как оказалось, Python прекрасно заре комендовал себя в обоих случаях. За дополнительными сведениями о компаниях, использующих Py thon, обращайтесь на вебсайт http://www.python.org. Что можно делать с помощью Python? Кроме того, будучи удачно спроектированным языком программиро вания, Python прекрасно подходит для решения реальных задач из разряда тех, которые разработчикам приходится решать ежедневно. Он используется в самом широком спектре применений – и как инст румент управления другими программными компонентами, и для реа лизации самостоятельных программ. Фактически, круг ролей, кото рые может играть Python как многоцелевой язык программирования, практически не ограничен: он может использоваться для реализации всего, что угодно, – от вебсайтов и игровых программ до управления роботами и космическими кораблями. Однако сферу использования Python в настоящее время можно разбить на несколько широких категорий. Следующие несколько разделов опи сывают наиболее типичные области применения Python в наши дни, а также инструментальные средства, используемые в каждой из облас тей. У нас не будет возможности заняться исследованием инструмен тов, упоминаемых здесь. Если какието из них заинтересуют вас, обра щайтесь на вебсайт проекта Python за более подробной информацией. Что можно делать с помощью Python? 43 Системное программирование Встроенные в Python интерфейсы доступа к службам операционных систем делают его идеальным инструментом для создания переноси мых программ и утилит системного администрирования (иногда они называются инструментами командной оболочки). Программы на языке Python могут отыскивать файлы и каталоги, запускать другие программы, производить параллельные вычисления с использовани ем нескольких процессов и потоков и делать многое другое. Стандартная библиотека Python обеспечивает возможность связыва ния в соответствии с требованиями стандартов POSIX и поддерживает все типичные инструменты операционных систем: переменные окру жения, файлы, сокеты, каналы, процессы, многопоточную модель ис полнения, поиск по шаблону с использованием регулярных выраже ний, аргументы командной строки, стандартные интерфейсы доступа к потокам данных, запуск команд оболочки, дополнение имен файлов и многое другое. Кроме того, системные интерфейсы в языке Python созданы переносимыми, например, сценарий копирования дерева ка талогов не требует внесения изменений, в какой бы операционной сис теме он ни использовался. Графический интерфейс Простота Python и высокая скорость разработки делают его отличным средством разработки графического интерфейса. В состав Python вхо дит стандартный объектноориентированный интерфейс к Tk GUI API, который называется Tkinter, позволяющий программам на языке Py thon реализовать переносимый графический интерфейс с внешним ви дом, присущим операционной системе. Графические интерфейсы на базе Python/Tkinter без изменений могут использоваться в MS Win dows, X Window (в операционных системах UNIX и Linux) и Mac OS (как в классической версии, так и в OS X). Свободно распространяемый пакет расширения PMW содержит дополнительные визуальные ком поненты для набора Tkinter. Кроме того, существует прикладной ин терфейс wxPython GUI API, основанный на библиотеке C++, который предлагает альтернативный набор инструментальных средств по строения переносимых графических интерфейсов на языке Python. Инструменты высокого уровня, такие как PythonCard и Dabo, построе ны на основе таких API, как wxPython и Tkinter. При выборе соответ ствующей библиотеки вы также сможете использовать другие инстру менты создания графического интерфейса, такие как Qt, GTK, MFC и Swing. Для разработки приложений с вебинтерфейсом или не предъ являющих высоких требований к интерфейсу можно использовать Jy thon (реализация Python на языке Java, описывается в главе 2) и CGI сценарии, которые обеспечивают дополнительные возможности по созданию пользовательского интерфейса. 44 Глава 1. Python в вопросах и ответах Вебсценарии Интерпретатор Python поставляется вместе со стандартными интер нетмодулями, которые позволяют программам выполнять разнооб разные сетевые операции как в режиме клиента, так и в режиме серве ра. Сценарии могут производить взаимодействия через сокеты, извле кать информацию из форм, отправленных серверным CGIсценариям; передавать файлы по протоколу FTP; обрабатывать файлы XML; пере давать, принимать, создавать и производить разбор писем электронной почты; загружать вебстраницы с указанных адресов URL; произво дить разбор кода HTML и XML полученных вебстраниц; производить взаимодействия по протоколам XMLRPC, SOAP и Telnet; и многое другое. Библиотеки, входящие в состав Python, делают реализацию подобных задач удивительно простым делом. Кроме того, существует огромная коллекция сторонних инструментов для создания сетевых программ на языке Python, которые можно найти в Интернете. Например, система HTMLGen позволяет создавать HTML страницы на основе описаний классов Python. Пакет mod_python пред назначен для запуска сценариев на языке Python под управлением веб сервера Apache и поддерживает шаблоны механизма Python Server Pages. Система Jython обеспечивает бесшовную интеграцию Python/ Java и поддерживает серверные апплеты, которые выполняются на стороне клиента. Помимо этого для Python существуют полноценные пакеты вебразработки, такие как Django, TurboGears, Pylons, Zope и WebWare, поддерживающие возможность быстрого создания полно функциональных высококачественных вебсайтов на языке Python. Интеграция компонентов Возможность интеграции программных компонентов в единое прило жение с помощью Python уже обсуждалась выше, когда мы говорили о Python как о языке управления. Возможность Python расширяться и встраиваться в системы на языке C и C++ делает его удобным и гиб ким языком для описания поведения других систем и компонентов. Например, интеграция с библиотекой на языке C позволяет Python проверять наличие и запускать библиотечные компоненты, а встраи вание Python в программные продукты позволяет производить на стройку программных продуктов без необходимости пересобирать эти продукты или поставлять их с исходными текстами. Такие инструменты, как SWIG и SIP, автоматически генерирующие программный код, могут автоматизировать действия по связыванию скомпилированных компонентов в Python для последующего их ис пользования в сценариях. А такие огромные платформы, как под держка COM в MS Windows, Jython – реализация на языке Java, Iron Python – реализация на базе .NET и разнообразные реализации CORBA, предоставляют альтернативные возможности организации взаимодей ствий с компонентами. Например, в операционной системе Windows Что можно делать с помощью Python? 45 сценарии на языке Python могут использовать платформы управления такими приложениями, как MS Word и Excel. Приложения баз данных В языке Python имеются интерфейсы доступа ко всем основным реля ционным базам данных – Sybase, Oracle, Informix, ODBC, MySQL, PostgreSQL, SQLite и многим другим. В мире Python существует также переносимый прикладной программный интерфейс баз данных , пред назначенный для доступа к базам данных SQL из сценариев на языке Python, который унифицирует доступ к различным базам данных. На пример, при использовании переносимого API сценарий, предназна ченный для работы со свободной базой данных MySQL, практически без изменений сможет работать с другими системами баз данных (та кими как Oracle). Все, что потребуется сделать для этого, – заменить используемый низкоуровневый интерфейс. Стандартный модуль pickle реализует простую систему хранения объ+ ектов , что позволяет программам сохранять и восстанавливать объек ты Python в файлах или в специализированных объектах. В Сети мож но также найти систему сторонних разработчиков, которая называется ZODB. Она представляет собой полностью объектноориентированную базу данных для использования в сценариях на языке Python. Сущест вует еще один инструмент под названием SQLObject, который отобра жает реляционные таблицы в модель классов языка Python. В версии Python 2.5 стандартной частью Python стала база данных SQLite. Быстрое создание прототипов В программах на языке Python компоненты, написанные на Python и на C, выглядят одинаково. Благодаря этому можно сначала созда вать прототипы систем на языке Python, а затем переносить выбранные компоненты на компилирующие языки, такие как C и C++. В отличие от ряда других инструментов разработки прототипов, Python не требу ет, чтобы система была полностью переписана, как только прототип будет отлажен. Части системы, которые не требуют такой эффективно сти выполнения, какую обеспечивает C++, можно оставить на языке Python, что существенно упростит ее сопровождение и использование. Программирование математических и научных вычислений Расширение NumPy для математических вычислений, упоминавшееся выше, включает такие мощные элементы, как объектмассив, интер фейсы к стандартным математическим библиотекам и многое другое. Расширение NumPy – за счет интеграции с математическими библиоте ками, написанными на компилирующих языках программирования, – превращает Python в сложный, но удобный инструмент программиро вания математических вычислений, который зачастую может заменить 46 Глава 1. Python в вопросах и ответах существующий программный код, написанный на традиционных ком пилирующих языках, таких как FORTRAN и C++. Дополнительные инструменты математических вычислений для Python поддерживают возможность создания анимационных эффектов и трехмерных объек тов, позволяют организовать параллельные вычисления и т. д. Игры, изображения, искусственный интеллект, XMLроботы и многое другое Язык программирования Python можно использовать для решения бо лее широкого круга задач, чем может быть упомянуто здесь. Напри мер, с помощью системы pygame можно создавать игровые программы и анимационные ролики; обрабатывать изображения с помощью паке та PIL и других; управлять роботом с помощью инструмента PyRo; производить разбор XMLдокументов с помощью пакета библиотек xml , модуля xmlrpclib и расширений сторонних разработчиков; про граммировать искусственный интеллект с помощью эмулятора нейро сетей и оболочек экспертных систем; анализировать фразы на естест венном языке с помощью пакета NLTK. Можно даже разложить пась янс с помощью программы PySol. Поддержку многих других приклад ных областей можно найти на вебсайтах Vaults of Parnassus и PyPI (ищите ссылки с помощью Google или на сайте http://www.python.org). Вообще говоря, многие из этих областей применения Python – всего лишь разновидности одной и той же роли под названием «интеграция компонентов». Использование Python в качестве интерфейса к биб лиотекам компонентов, написанных на языке C, делает возможным создание сценариев на языке Python для решения задач в самых раз ных прикладных областях. Как универсальный, многоцелевой язык программирования, поддерживающий возможность интеграции, Py thon может применяться очень широко. |