Язык программирования Python (Сузи) - страница 18

. Хорошим примером такого пакета является пакет >xml, в котором собраны модули для различных аспектов обработки XML.

В программе на Python модуль представлен объектом–модулем, атрибутами которого являются имена, определенные в модуле:

>>>> import datetime

>>>> d1 = datetime.date(2004, 11, 20)

В данном примере импортируется модуль >datetime. В результате работы оператора >import в текущем пространстве имен появляется объект с именем >datetime.

Модули для использования в программах на языке Python по своему происхождению делятся на обычные (написанные на Python) и модули расширения, написанные на другом языке программирования (как правило, на C). С точки зрения пользователя они могут отличаться разве что быстродействием. Бывает, что в стандартной библиотеке есть два варианта модуля: на Python и на C. Таковы, например, модули >pickle и >cPickle. Обычно модули на Python в чем–то гибче, чем модули расширения.

Модули в Python

Модуль оформляется в виде отдельного файла с исходным кодом. Стандартные модули находятся в каталоге, где их может найти соответствующий интерпретатор языка. Пути к каталогам, в которых Python ищет модули, можно увидеть в значении переменной >sys.path:

>>>> sys.path

>['', '/usr/local/lib/python23.zip', '/usr/local/lib/python2.3',

>'/usr/local/lib/python2.3/plat–linux2', '/usr/local/lib/python2.3/lib–tk',

>'/usr/local/lib/python2.3/lib–dynload',

>'/usr/local/lib/python2.3/site–packages']

В последних версиях Python модули можно помещать и в zip–архивы для более компактного хранения (по аналогии с jar–архивами в Java).

При запуске программы поиск модулей также идет в текущем каталоге. (Нужно внимательно называть собственные модули, чтобы не было конфликта имен со стандартными или дополнительно установленными модулями.)

Подключение модуля к программе на Python осуществляется с помощью оператора >import. У него есть две формы: >import и >from–import:

>import os

>import pre as re

>from sys import argv, environ

>from string import *

С помощью первой формы с текущей областью видимости связывается только имя, ссылающееся на объект модуля, а при использовании второй — указанные имена (или все имена, если применена >*) объектов модуля связываются с текущей областью видимости. При импорте можно изменить имя, с которым объект будет связан, с помощью >as. В первом случае пространство имен модуля остается в отдельном имени и для доступа к конкретному имени из модуля нужно применять точку. Во втором случае имена используются так, как если бы они были определены в текущем модуле:

>os.system("dir")

>digits = re.compile("\d+")