Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [ 15 ] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145

6.4 Стандартные модули

Python распространяется с библиотекой стандартных модулей, которой посвящена третья часть книги. Часть модулей встроена в интерпретатор, обеспечивая доступ к операциям, которые не входят в ядро языка, но, тем не менее, встроены либо из соображений эффективности, либо для обеспечения доступа к примитивам операционной системы. Набор таких модулей зависит от конфигурации, так, например, модуль amoeba присутствует только в системах, которые поддерживают примитивы Amoeba. Один модуль заслуживает особого внимания: sys, который присутствует всегда. Переменные sys.ps1 и sys.ps2 при работе в интерактивном режиме определяют строки, используемые для первичного и вторичного приглашения:

>>> import sys >>> sys.ps1

>>> sys.ps2

>>> sys.ps1 = C> C> print Привет! Привет!

C>

Переменная sys path содержит список строк с именами каталогов, в которых происходит поиск модулей. Она инициализируется из значения переменной окружения PYTHONPATH и встроенного значения по умолчанию. Вы можете изменить ее значение, используя стандартные операции со списками:

>>> import sys

>>> sys.path.append(/ufs/guido/lib/python)

щееся для загрузки, поместите большую часть кода в модуль, оставив в программе лишь загрузочную часть, которая импортирует этот модуль.

• Возможно использование модуля (или запуск программы) при наличии .pyc-файла (или .pyo-файла, если используется одна из опций -O или -OO), даже если отсутствует .py -файл. Таким образом, Вы можете распространять библиотеки и программы в виде, из которого относительно сложно извлечь информацию об используемых алгоритмах.

• Модуль compileall позволяет создать .pyc - (или .pyo -) файлы для всех модулей в каталоге. Это может быть особенно полезно, если вы хотите ограничить доступ к каталогу, в котором находится библиотека. Заметим, что интерпретатор не будет использовать .pyc -файлы, если он запущен с включенной оптимизацией, и .pyo -файлы, если оптимизация выключена (если же отсутствует .py -файл, модуль окажется недоступным).



Для выяснения имен, определенных в модуле, можно использовать встроенную функцию dir() . Она возвращает отсортированный список строк:

>>> import fibo, sys >>> dir(fibo)

[ name , fib, fib2]

>>> dir(sys)

[ name , argv, builtin module names,

copyright, exit, maxint, modules, path, ps1, ps2, setprofile, settrace, stderr, stdin, stdout, version]

Без аргументов, dir() возвращает список имен, определенных в текущей области видимости:

>>> a = [1, 2, 3, 4, 5]

>>> import fibo, sys >>> fib = fibo.fib

>>> dir()

[ name , a, fib, fibo, sys]

Обратите внимание, что перечисляются имена объектов всех типов: переменные, модули, функции и т. д.

Список, возвращаемый функцией dir() не содержит имена встроенных функций и переменных - они определены в стандартном модуле builtin :

>>> import builtin >>> dir( builtin )

[AccessError, AttributeError, ConflictError, EOFError, lOError, ImportError, IndexError, KeyError, Keyboardlnterrupt, MemoryError, NameError, None, OverflowError, RuntimeError, SyntaxError, SystemError, SystemExit, TypeError, ValueError, ZeroDivisionError,

name , abs, apply, chr, cmp, coerce,

compile, dir, divmod, eval, execfile, filter, float, getattr, hasattr, hash, hex, id, input, int, len, long, map, max, min, oct, open, ord, pow, range, raw input, reduce, reload, repr, round, setattr, str, type, xrange]

6.5 Функция dir()



6.6 Пакеты

Пакеты - способ структурирования пространств имен модулей, используя "точечную запись". Например, имя модуля A.B обозначает подмодуль с именем A в пакете B. Так же, как использование модулей делает безопасным использование глобального пространства имен авторами различных модулей, использование точечной записи делает безопасным использование имен модулей авторами многомодульных пакетов.

Предположим, Вы хотите спроектировать совокупность модулей ("пакет") для единообразной обработки звуковых файлов и данных. Существует множество форматов звуковых файлов (обычно распознаваемых по их расширению, например .wav , .aiff , .au ), так что Вам необходимо создавать и поддерживать все возрастающий набор модулей для преобразования между различными форматами файлов. Вы можете захотеть выполнять множество различных операций над звуковыми данными (микширование, добавление эха, частотная обработка, создание искусственного стереоэффекта), то есть, вдобавок, Вы будете писать нескончаемый поток модулей для выполнения этих операций. Вот примерная структура Вашего пакета (выраженная в терминах иерархической файловой системы):

Sound/

init py

Formats/

init py wavread py wavwrite py aiffread py aiffwrite py auread py auwrite py

Верхний уровень пакета Инициализация пакета Работа с файлами

Effects/

init py echo py surround py reverse py

Звуковые эффекты

Filters/

init py equalizer.py vocoder py karaoke py

Фильтры

Файл init .py необходим для того, чтобы Python распознавал каталог, как содержащий пакет - таким образом предотвращается маскировка полноценных модулей, расположенных далее в путях поиска, каталогами с распространенными именами (такими как string ). В простейшем случае, init .py - пустой файл, но может содер-



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [ 15 ] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145