Язык программирования Python - стандартная библиотека
Большим достоинством Python как инструмента программиста является
стандартная библиотека, входящая в дистрибутив. Первое, с чем сталкивается
программист - это, конечно, встроенные типы данных (я их уже рассматривал),
встроенные исключения, и встроенные функции.
Список
их невелик, и программисты, скажем, перешедшие с Перла, привыкшие, что у
них сразу есть функции для манипуляций со строками, с датой и временем,
регулярные выражения - спрашивают "да есть у вас в Питоне вообще хоть
что-нибудь?" Все есть, только не в списке встроенных функций, а в модулях
стандартной библиотеки. Манипуляции со строками делаются с помощью модуля
string, дата и время приходят из модуля time, регулярные выражения в модуле
re, доступ к функциям операционной системы - модуль os, и так далее.
Рассмотрим подробнее стандартную библиотеку Питона. Библиотека состоит
из нескольки разделов. Во-первых, модули, дающие доступ к внутренностям
интерпретатора и особенностям языка и реализации. Во-вторых, модули для
манипуляции со строками, в том числе и с юникодовыми строками. Модули,
дающие доступ к системной библиотеке, в первую очередь математические
функции. Модули для написания тестов в стиле Extreme Programming. Модули
для (относительно) переносимого способа доступа к функциям операционной
системы. В библиотеку же входит простой пошаговый отладчик и профилировщик
- средство нахождения "узких мест" кода. Отдельный большой раздел
библиотеки - сетевые протоколы и средства Интернет; Python - отличный
инструмент для написания клиентов и серверов, CGI, парсеров HTML/XML и
т.д.
Рассмотрим некоторые из этих разделов поподробнее. Первый важный модуль
- sys, модуль доступа к Системе. Не операционной системе, а Системе. То
есть к интерпретатору. Самая популярная функция из этого модуля - exit, то
есть завершение работы интерпретатора. Впрочем, она в модуле не
единственная. Еще есть функции получения информации о последнем исключении,
хуки для отладчиков и профилировщиков, и тому подобные "потроха"
интерпретатора. Несколько интересных переменных - стандартные потоки
ввода/вывода - stdin, stdout и stderr.
Еще несколько модулей, тесно связанных с интерпретатором. Модуль gc
позволяет управлять сборкой мусора. Модуль atexit дает возможность каждому
модулю зарегистрировать функцию деинициализации, которая вызовется при
завершении программы. В модуле types перечислены все встроенные типы
данных, так что программист может выполнить проверку
if type(myvar) == types.ListType...
Модуль inspect - для интроспекции объектов во время выполнения. Модуль
traceback позволяет получить и распечатать информацию об исключении. Parser
действительно дает доступ ко внутреннему парсеру языка, а imp позволяет
управлять импортом модулей. Казалось бы, зачем им управлять? Очень просто
- вдруг программа распространяется в нестандартном виде или на
нестандартном носителе, скажем, в zip-файле. Тут возможность импортировать
модули особенным образом программисту сильно пригодится.
Модули marshal, pickle и shelve позволяют сериализовать объекты, то
есть превращать их в поток байт, который потом можно сохранить в файл или
передать по сети. Впоследствии сериализованные объекты можно восстановить
средствами тех же модулей. Marshal умеет сериализовать только встроенные
типы данных, включая питоновский байт-код. Этот модуль используется самим
интерпретатором для загрузки сохраненного байт-кода из файла при импорте
модуля. Pickle не умеет сериализовать и восстанавливать байт-код, и это
сделано специально, для безопасности, чтобы программист был уверен, что не
получит по сети вирус в байт-коде. Зато у pickle есть средства, с помощью
которых программист может управлять сериализацией и восстановлением своих
объектов. Модуль shelve позволяет сохранять сериализованные объекты в
дисковых хешах (BerkeleyDB, (G/N)DBM). Модули dumbdbm, dbm, gdbm, bsddb
дают доступ к соответствующим встраиваемым базам данных; модуль anydbm
является оболочкой с единым API, который позволяет использовать любую из
имеющихся БД; модуль whichdb позволяет определить, в каком формате текущая
БД.
String - модуль для манипуляции со строками без регулярных выражений.
Здесь собраны функции для поиска подстроки в строке, замены и тому
подобное. Регулярные выражения - в модуле re. Долгое время этот модуль был
интерфейсом к библиотеке PCRE (Perl-Compatible Regular Expressions), но в
Python 2.0 был полностью переписан для того чтобы работать не только с
ASCII-строками, но и с юникодом. Модуль locale дает доступ к функциям
локализации, имеющимся в операционной системе; при установки локали этот
модуль модифицирует переменные модуля string в соответствии с установленной
локалью.
Модули для интерфейса с операционной системой. Первый из них - модуль os.
В нем собраны функции для для управления файловой системой и процессами.
Модуль thread содержит низкоуровневый переносимый интерфейс к потокам
(нитям, "легким" процессам) операционной системы. Модуль threading содержит
классы-высокоуровневые оболочки модуля thread в стиле Java; здесь есть
классы Thread, Lock, Condition, Event, Semaphore. Модуль mmap дает
переносимый интерфейс к отображаемым в память файлам. Модули glob и fnmatch
позволяют манипулировать шаблонами имен файлов. Библиотека signal позволяет
устанавливать обработчики для асинхронных событий (POSIX signals в тех ОС,
которые эти сигналы поддерживают).
Отдельной группой стоят модули, специфичные для юникса: posix и
posixfile (низкоуровневые части модуля os), pwd и grp (доступ к функциям
паролей, получение информации о пользователях и группах пользователей),
модуль crypt, модули tty и pty (функции терминала и псевдотерминала),
модуль fcntl (доступ к системным вызовам fcntl и ioctl), модуль resource
(системные вызовы get/set-rlimit, getrusage), модуль syslog, модули pipes и
cmd.
Есть модули для доступа к внешним библиотекам. Модули zlib/gzip/zipfile
дают доступ к соответствующим функциям компрессии (архивирования). Модули
readline и rlcompleter - к библиотеке GNU readline. Библиотеки math,
cmath, random дают программисту доступ к широкому спектру математических
функций.
Несколько модулей криптографии, из которых 2 для доступа не к
алгоритмам шифрования и дешифрования, а к хешам - модули md5 и sha. Модули
Bastion и rexec позволяют создавать защищенные среды и выполнять в них код,
которому программист не доверяет, например, код, переданный по сети.
Программист сам управляет степенью доверия, и сам определяет, какое
подмножество встроенных функций и стандартных модулей будет доступно в
такой среде.
В дистрибутив Питона входит интерфейс к графической библиотеке Tk (на
самом деле в этом интерфейсе спрятан полноценный Tcl :), сами Tcl/Tk в
дистрибутив не входят, их надо ставить отдельно. Есть несколько простых
модулей для манипулирования аудиофайлами и файлами изображений.
|