Главная страница

справочник по Python. мм isbn 9785932861578 9 785932 861578


Скачать 4.21 Mb.
Названиемм isbn 9785932861578 9 785932 861578
Анкорсправочник по Python
Дата08.05.2022
Размер4.21 Mb.
Формат файлаpdf
Имя файлаBizli_Python-Podrobnyy-spravochnik.440222.pdf
ТипСправочник
#518195
страница24 из 82
1   ...   20   21   22   23   24   25   26   27   ...   82
294
Глава 13. Службы Python времени выполнения
Атрибут
Параметр командной строки
flags.debug
-d flags.py3k_warning
-3
flags.division_warning
-Q
flags.division_new
-Qnew flags.inspect
-i flags.interactive
-i flags.optimize
-O
или –OO
flags.dont_write_bytecode
-B
flags.no_site
-S
flags.ignore_environment
-E
flags.tabcheck
-t или -tt flags.verbose
-v flags.unicode
-U
float_info
Объект, который хранит информацию о внутреннем представлении чисел с плавающей точкой. Значения атрибутов этого объекта взяты из заголо- плавающей точкой. Значения атрибутов этого объекта взяты из заголо- плавающей точкой. Значения атрибутов этого объекта взяты из заголо- точкой. Значения атрибутов этого объекта взяты из заголо- точкой. Значения атрибутов этого объекта взяты из заголо-
. Значения атрибутов этого объекта взяты из заголо-
Значения атрибутов этого объекта взяты из заголо- вочного файла float.h языка C.
Атрибут
Описание
float_info.epsilon
Разность между 1.0 и ближайшим числом с пла- вающей точкой больше 1.0.
float_info.dig
Количество десятичных знаков, которые могут быть представлены без изменений после округления.
float_info.mant_dig
Количество цифр мантиссы в системе счисления по основанию, указанному в атрибуте float_info.radix.
float_info.max
Максимально возможное число с плавающей точ- кой.
float_info.max_exp
Максимальная величина экспоненты в системе счисления по основанию, указанному в атрибуте float_info.radix float_info.max_10_exp
Максимальная величина экспоненты в системе счисления по основанию 10.
float_info.min
Минимально возможное положительное число с плавающей точкой.
float_info.min_exp
Минимальная величина экспоненты в системе счисления по основанию, указанному в атрибуте float_info.radix

Модуль sys
295
Атрибут
Описание
float_info.min_10_exp
М
инимальная величина экспоненты в системе счисления по основанию 10.
float_info.radix
Основание системы счисления для показателя сте- пени.
float_info.rounds
Алгоритм округления (-1 – не определено, 0 – в сто- рону нуля, 1 – до ближайшего значения, 2 – в сто- рону положительной бесконечности, 3 – в сторону отрицательной бесконечности).
hexversion
Целое число, в шестнадцатеричном представлении которого закодирована информация о номере версии, содержащемся в переменной sys.version_info.
Значение этой переменной всегда гарантированно увеличивается с выхо- дом новой версии интерпретатора.
last_type
, last_value, last_traceback
Значения этих переменных устанавливаются, когда появляется необрабо- танное исключение и интерпретатор выводит сообщение об ошибке. В пере- менной last_type сохраняется тип последнего исключения, в переменной last_value
– экземпляр последнего исключения, а в переменной last_trace-
_trace- trace- back
– объект с трассировочной информацией. Обратите внимание, что в многопоточных приложениях не гарантируется достоверность информа- ции в этих переменных, поэтому вместо них рекомендуется пользоваться функцией sys.exc_info().
maxint
Максимально возможное значение целого числа (только в Python 2).
maxsize
Максимально возможное целое число, поддерживаемое типом size_t язы- ка C в системе. Это значение определяет максимально возможную длину строк, списков, словарей и других встроенных типов.
maxunicode
Целое число, определяющее наибольший кодовый пункт Юникода, кото- рый может быть представлен. По умолчанию имеет значение 65 535 для
16-битной кодировки UCS-2. Если при сборке интерпретатор Python был настроен на использование кодировки UCS-4, это число будет больше.
modules
Словарь, который отображает имена модулей в объекты модулей.
path
Список строк, определяющих путь поиска модулей. Первый элемент спи- ска всегда содержит путь к каталогу, в котором находился сценарий, ис- пользованный для запуска интерпретатора (если доступен). Подробности приводятся в главе 8 «Итераторы и генераторы».

296
Глава 13. Службы Python времени выполнения
platform
Строка, идентифицирующая платформу, например ‘linux-i386’.
prefix
Каталог, куда были установлены платформонезависимые файлы Python.
ps1
, ps2
Строки, содержащие текст основного и дополнительного приглашения к вводу интерпретатора. Изначально переменная ps1 имеет значение ‘>>> ‘, а ps2 – значение ‘... ‘. При назначении этим переменным других значений для получения текста приглашения будут использоваться методы str() на- значенных объектов.
py3kwarning
В Python 2 этот флаг устанавливается в значение True, когда интерпретатор запускается с ключом -3.
stdin
, stdout, stderr
Объекты файлов, соответствующие потокам стандартного ввода, стандарт- ного вывода и стандартного вывода сообщений об ошибках. Переменная stdin используется функциями raw_input() и input(). Переменная stdout используется инструкцией print для вывода значений аргументов и функ- циями raw_input() и input() – для вывода приглашения к вводу. Перемен- ная stderr используется интерпретатором для вывода приглашения к вводу и сообщений об ошибках. Этим переменным могут быть назначены любые объекты, поддерживающие метод write(), принимающий единственный строковый аргумент.
__stdin__
, __stdout__, __stderr__
Переменные, содержащие значения stdin, stdout и stderr, полученные в мо- мент запуска интерпретатора.
tracebacklimit
Максимальное количество уровней трассировочной информации, кото- рая выводится при появлении необработанного исключения. Значение по умолчанию 1000. Значение 0 подавляет вывод трассировочной информа-
1000. Значение 0 подавляет вывод трассировочной информа-
Значение 0 подавляет вывод трассировочной информа- ции, при этом выводятся только тип исключения и информация из него.
version
Строка с номером версии.
version_info
Информация о версии в виде кортежа (major, minor, micro, releaselevel, seri-
al)
. Все значения являются целочисленными, за исключением releaselevel, которое является строкой ‘alpha’, ‘beta’, ‘candidate’ или ‘final’.
warnoptions
Список аргументов параметра командной строки –W, полученного интер- претатором.

Модуль sys
297
winver
Н
омер версии, который обычно формируется из ключей реестра в системе
Windows.
Функции
Ниже приводятся функции, доступные в модуле sys:
_clear_type_cache()
Очищает внутренний кэш типов. Чтобы оптимизировать поиск наиболее часто используемых методов, внутри интерпретатора имеется небольшой кэш на 1024 записи. Этот кэш позволяет ускорить повторные попытки по- иска, особенно в программном коде, где используются классы с глубокой иерархией наследования. Обычно этот кэш очищать не требуется, но эта функция может пригодиться при решении некоторых проблем освобожде- ния памяти, связанных с подсчетом ссылок. Например, когда метод в кэше удерживает ссылку на объект, который требуется удалить.
_current_frames()
Возвращает словарь, отображающий идентификаторы потоков выполне- ния на самые верхние кадры стека, для потоков, которые были активны в момент вызова функции. Эта информация может пригодиться при раз- работке инструментов отладки многопоточных приложений (то есть для поиска причин взаимоблокировок). Имейте в виду, что значения, возвра- щаемые функцией, представляют собой всего лишь «мгновенный снимок» интерпретатора в момент вызова функции. К тому времени, когда функция вернет результаты, потоки могут уже выполняться в другом месте.
displayhook([value])
Эта функция вызывается для вывода результатов выражений, когда ин- терпретатор выполняется в интерактивном режиме. По умолчанию она выводит значение repr(value) в поток стандартного вывода и сохраняет его в переменной __builtin__._. Имеется возможность переопределять значение displayhook
, чтобы при необходимости обеспечить иное поведение.
excepthook(type,value,traceback)
Эта функция вызывается при появлении необработанного исключения.
В аргументе type ей передается класс исключения, в аргументе value – значение, переданное инструкции raise, а в аргументе traceback – объ- ект с трассировочной информацией. По умолчанию она выводит в поток стандартного вывода сообщений об ошибках информацию об исключении и трассировочную информацию. Однако имеется возможность переопреде- лить эту функцию и реализовать альтернативный способ реакции на необ- работанные исключения (что может оказаться полезным в специализиро- ванных приложениях, таких как отладчики или сценарии CGI).
exc_clear()
Очищает всю информацию, связанную с последним исключением. При этом очищается только информация, имеющая отношение к вызывающе- му потоку выполнения.

298
Глава 13. Службы Python времени выполнения
exc_info()
Возвращает кортеж (type, value, traceback) с информацией об исключении, обрабатываемом в текущий момент. В аргументе type передается тип ис- ключения, в аргументе value – параметры инструкции raise, а в аргументе
traceback
– объект с трассировочной информацией о той точке в стеке вы- зовов, где возникло исключение. Если в текущий момент времени никакое исключение не обрабатывается, возвращает None.
exit([n])
Завершает работу интерпретатора, возбуждая исключения SystemExit. В ар- ар- ар- гументе n передается целое число – код завершения. Значение 0 рассматри- передается целое число – код завершения. Значение 0 рассматри- целое число – код завершения. Значение 0 рассматри- целое число – код завершения. Значение 0 рассматри- число – код завершения. Значение 0 рассматри- число – код завершения. Значение 0 рассматри-
– код завершения. Значение 0 рассматри- код завершения. Значение 0 рассматри- завершения. Значение 0 рассматри- завершения. Значение 0 рассматри-
. Значение 0 рассматри-
Значение 0 рассматри- вается как признак нормального завершения (по умолчанию); ненулевые значения интерпретируются как признак ошибки. Если в аргументе n пере- дать значение, не являющееся целым числом, оно будет выведено в поток sys.stderr
, а завершение работы будет произведено с кодом 1.
getcheckinterval()
Возвращает величину интервала проверки, который определяет, как часто интерпретатор будет проверять наличие сигналов, необходимость пере- ключения потоков выполнения и других периодических событий.
getdefaultencoding()
Возвращает кодировку, используемую по умолчанию для преобразова- ний строк Юникода. Возвращаемое значение является строкой, такой как
‘ascii’
или ‘utf-8’. Установка кодировки по умолчанию производится мо- дулем site.
getdlopenflags()
Возвращает флаги, которые передаются функции dlopen(), написанной на языке C, во время загрузки модулей расширений в UNIX. Дополнительные подробности смотрите в документации к модулю dl.
getfilesystemencoding()
Возвращает кодировку символов, используемую операционной системой для отображения символов Юникода в именах файлов. В Windows воз-
Windows воз- воз- вращает ‘mbcs’, а в Macintosh OS X – ‘utf-8’. В UNIX кодировка зависит от региональных настроек, и функция будет возвращать значение параметра настройки CODESET. Может возвращать None, если в системе используется ко- дировка по умолчанию.
_getframe([depth])
Возвращает объект кадра стека вызовов. Если аргумент depth опущен или равен нулю, возвращается самый верхний кадр. В противном случае воз- вращается кадр, расположенный ниже текущего кадра стека на указанное число уровней. Например, вызов _getframe(1) вернет кадр стека вызываю- щей функции. При передаче в аргументе depth недопустимого значения воз- буждает исключение ValueError.
getprofile()
Возвращает функцию профилирования, установленную вызовом функции setprofile()

Модуль sys
299
getrecursionlimit()
Возвращает ограничение на количество рекурсивных вызовов функций.
getrefcount(object)
Возвращает значение счетчика ссылок на объект object.
getsizeof(object [, default])
Возвращает размер объекта object в байтах. Вычисления выполняются с по- мощью специального метода __sizeof__() указанного объекта. Если этот ме- тод не определен, возбуждается исключение TypeError, если не было указано значение по умолчанию в аргументе default. Поскольку на реализацию ме- тодов __sizeof__() в объектах не накладывается никаких ограничений, то нет никакой гарантии, что возвращаемое значение функции будет точно со- ответствовать объему занимаемой памяти. Однако для встроенных типов, таких как списки или строки, функция возвращает корректное значение.
gettrace()
Возвращает функцию трассировки, установленную функцией settrace().
getwindowsversion()
Возвращает кортеж (major,minor,build,platform,text), описывающий версию используемой системы Windows. Поле major содержит основной номер вер- содержит основной номер вер- основной номер вер- основной номер вер- номер вер- номер вер- вер- вер- сии. Например, значение 4 соответствует операционной системе Windows
NT 4.0, а значение 5 – Windows 2000 и Windows XP. Поле minor содержит младший номер версии. Например, значение 0 соответствует операцион- ной системе Windows 2000,
1
а значение 1 – Windows XP. Поле build содер- жит номер сборки. Поле platform – целое число с информацией о платформе и может принимать одно из типичных значений: 0 (Win32s в Windows 3.1),
1 (Windows 95, 98 или Me), 2 (Windows NT, 2000, XP) или 3 (Windows CE).
Поле text содержит строку с дополнительной информацией, такой как
“Service Pack 3”
setcheckinterval(n)
Устанавливает количество инструкций виртуальной машины Python, ко-
Python, ко-
, ко- торые должен выполнить интерпретатор, прежде чем он проверит насту- пление периодического события, такого как сигнал или необходимость переключения контекста потока выполнения. По умолчанию устанавлива- ется значение 10.
setdefaultencoding(enc)
Устанавливает кодировку по умолчанию. В аргументе enc должна переда- ваться строка, такая как ‘ascii’ или ‘utf-8’. Эта функция определена толь- функция определена толь- функция определена толь- определена толь- определена толь- толь- толь- ко в модуле site. Может вызываться из пользовательских модулей sitecus- tomize
setdlopenflags(flags)
Устанавливает флаги, которые в дальнейшем будут передаваться функции dlopen()
, написанной на языке C, которая используется для загрузки моду-
C, которая используется для загрузки моду-
, которая используется для загрузки моду-
1
При старшем номере версии 5. – Прим. перев.

300
Глава 13. Службы Python времени выполнения лей расширений в UNIX. Эти флаги оказывают влияние на способ разре-
UNIX. Эти флаги оказывают влияние на способ разре-
. Эти флаги оказывают влияние на способ разре- шения имен в библиотеках и в других модулях расширений. В аргументе
flags
передается битная маска, составленная из значений флагов, объеди- ненных с помощью битовой операции ИЛИ, которые определены в модуле dl
, например sys.setdlopenflags(dl.RTLD_NOW | dl.RTLD_GLOBAL).
setprofile(pfunc)
Устанавливает функцию профилирования, которая может использоваться реализацией профилировщика исходных текстов.
setrecursionlimit(n)
Устанавливает ограничение на количество рекурсивных вызовов функ- ций. По умолчанию устанавливается значение 1000. Обратите внимание, что операционная система может накладывать свои ограничения на раз- мер стека, поэтому установка слишком большого значения может вызы- вать аварийное завершение процесса интерпретатора Python с сообщением
«Segmentation Fault» (ошибка сегментации) или «Access Violation» (нару-
Segmentation Fault» (ошибка сегментации) или «Access Violation» (нару-
Fault» (ошибка сегментации) или «Access Violation» (нару-
Fault» (ошибка сегментации) или «Access Violation» (нару-
» (ошибка сегментации) или «Access Violation» (нару-
Access Violation» (нару-
Violation» (нару-
Violation» (нару-
» (нару- шение прав доступа).
settrace(tfunc)
Устанавливает функцию трассировки, которая может использоваться реа- лизацией отладчика. Дополнительная информация об отладчике Python приводится в главе 11.
Модуль traceback
Модуль traceback используется для сбора и вывода трассировочной инфор- мации о программе после появления исключения. Функции в этом модуле оперируют объектами с трассировочной информацией, такими как в тре- тьем элементе возвращаемого значения функции sys.exc_info(). В основном этот модуль может использоваться для реализации нестандартного спосо- ба вывода сообщений об ошибках, например когда программы на языке Py-
Py- thon выполняются глубоко в недрах сетевого сервера и необходимо органи- выполняются глубоко в недрах сетевого сервера и необходимо органи- зовать вывод трассировочной информации в файл журнала.
print_tb(traceback [, limit [, file]])
Выводит в файл file до limit записей из объекта traceback с трассировочной информацией. Если аргумент limit опущен, выводятся все имеющиеся за- писи. Если аргумент file опущен, вывод отправляется в sys.stderr.
print_exception(type, value, traceback [, limit [, file]])
Выводит в файл file информацию об исключении и трассировочную ин- формацию. В аргументе type передается тип исключения, а в аргументе
value
– значение исключения. Аргументы limit и file имеют тот же смысл, что и в функции print_tb().
print_exc([limit [, file]])
То же, что и print_exception(), но применяется к информации, возвращае- мой функцией sys.exc_info().

Модуль types
301
format_exc([limit [, file]])
Возвращает строку, содержащую ту же информацию, которую выводит функция print_exc().
print_last([limit [, file]])
То же, что и print_exception(sys.last_type, sys.last_value, sys.last_trace- back,
limit, file)
print_stack([frame [, limit [, file]]])
Выводит трассировочную информацию для точки, откуда был сделан вызов функции. В необязательном аргументе frame передается начальный кадр сте- ка. Аргументы limit и file имеют тот же смысл, что и в функции print_tb().
extract_tb(traceback [, limit])
Извлекает ту же трассировочную информацию, что и функция print_tb().
Возвращает список кортежей вида (filename, line, funcname, text), содер- жащих информацию, которая обычно выводится в сообщениях об ошиб- ках. В аргументе limit передается количество возвращаемых записей.
extract_stack([frame [, limit]])
Извлекает ту же трассировочную информацию, что и функция print_
stack()
, но извлекает ее из кадра стека frame. Если аргумент frame опущен, используется кадр стека вызывающей функции. В аргументе limit переда- ется количество возвращаемых записей.
format_list(list)
Форматирует трассировочную информацию перед выводом. В аргументе
list
передается список кортежей, возвращаемый функцией extract_tb() или extract_stack().
format_exception_only(type, value)
Форматирует информацию об исключении перед выводом.
format_exception(type, value, traceback [, limit])
Форматирует трассировочную информацию и информацию об исключении перед выводом.
format_tb(traceback [, limit])
То же, что и format_list(extract_tb(traceback, limit)).
format_stack([frame [, limit]])
То же, что и format_list(extract_stack(frame, limit)).
tb_lineno(traceback)
Возвращает номер строки, установленной в объекте с трассировочной ин- формацией.
Модуль types
В модуле types объявляются имена встроенных типов, которые соответ- ствуют функциям, модулям, генераторам, кадрам стека и другим элемен-

302
Глава 13. Службы Python времени выполнения там программ. Имена, объявленные в этом модуле, часто используются при обращении к встроенной функции isinstance() и в других операциях над типами.
Переменная
Описание
BuiltinFunctionType
Тип встроенных функций
CodeType
Тип объектов с программным кодом
FrameType
Тип кадра стека выполняемых объектов
FunctionType
Тип пользовательских функций и lambda-выражений
GeneratorType
Тип объектов генераторов и итераторов
GetSetDescriptorType
Тип объектов дескрипторов методов getset
LambdaType
Альтернативное имя типа FunctionType
MemberDescriptorType
Тип объектов дескрипторов атрибутов
MethodType
Тип методов пользовательских классов
ModuleType
Тип модулей
TracebackType
Тип объектов с трассировочной информацией
Большинство типов объектов, перечисленных выше, могут играть роль конструкторов для создания объектов этих типов. В описании ниже пред- ставлены параметры, которые передаются при создании функций, моду- лей, объектов с программным кодом и методов. Подробнее об атрибутах созданных объектов и об аргументах, которые должны передаваться функ- циям, описываемым ниже, рассказывается в главе 3.
FunctionType(code, globals [, name [, defarags [, closure]]])
Создает новый объект функции.
CodeType(argcount, nlocals, stacksize, flags, codestring, constants, names,
varnames, filename, name, firstlineno, lnotab [, freevars [, cellvars ]])
Создает новый объект с программным кодом.
MethodType(function, instance, class)
Создает новый связанный метод объекта.
ModuleType(name [, doc])
Создает новый объект модуля.
Примечания
• Модуль types не должен использоваться для ссылки на встроенные типы объектов, такие как целые числа, списки или словари. В Python 2 мо-
Python 2 мо-
2 мо- дуль types объявляет и другие имена типов, такие как IntType и DictType.
Однако эти имена являются всего лишь псевдонимами имен встроен- ных типов int и dict. В новых программах следует использовать имена встроенных типов, потому что в Python 3 модуль types теперь содержит только перечисленные выше имена типов.

Модуль warnings
303
Модуль warnings
М
одуль warnings содержит функции, используемые для фильтрации и вы- вода предупреждений. В отличие от исключений, предупреждения слу- жат для того, чтобы оповещать пользователя о потенциальных проблемах, но без возбуждения исключений и прерывания выполнения программы.
Чаще всего модуль warnings применяется, чтобы информировать пользова- телей об использовании нерекомендуемых особенностей языка, которые могут не поддерживаться будущими версиями Python. Например:
>>> import regex
__main__:1: DeprecationWarning: the regex module is deprecated; use the re
(Перевод: использовать модуль regex не рекомендуется, пользуйтесь модулем re)
module
>>>
Подобно исключениям, предупреждения организованы в иерархию клас- сов, которая описывает основные категории предупреждений. Ниже пере- числены категории, поддерживаемые в настоящий момент:
Объект предупреждения
Описание
Warning
Базовый класс всех типов предупреждений
UserWarning
Предупреждение, определяемое пользователем
DeprecationWarning
Предупреждение об использовании нерекомендуе- мой особенности
SyntaxWarning
Потенциальная проблема с синтаксисом
RuntimeWarning
Потенциальная проблема времени выполнения
FutureWarning
Предупреждение о том, что семантика определен- ной особенности изменится в будущей версии
Все эти классы доступны в модуле __builtin__, так же как и модуль excep- tions
. Кроме того, все они являются экземплярами класса Exception. Это по- зволяет легко преобразовывать предупреждения в исключения.
Предупреждения возбуждаются с помощью функции warn(). Например:
warnings.warn(“не рекомендуется использовать особенность X.”)
warnings.warn(“работоспособность особенности Y может быть нарушена.”,
RuntimeWarning)
При необходимости предупреждения можно фильтровать. Фильтрация мо- жет использоваться для изменения порядка вывода предупреждений, по- давления вывода предупреждений или преобразования предупреждений в исключения. Для добавления фильтра для определенного типа предупре- ждения используется функция filterwarnings(). Например:
warnings.filterwarnings(action=”ignore”,
message=”.*regex.*”,
category=DeprecationWarning)
import regex # Предупреждение не появится

304
Глава 13. Службы Python времени выполнения
Ограниченную фильтрацию можно также выполнять с помощью параме- тра –W командной строки интерпретатора. Например:
% python –Wignore:the\ regex:DeprecationWarning
В модуле warnings объявлены следующие функции:
warn(message[, category[, stacklevel]])
Возбуждает предупреждение. В аргументе message передается строка с тек- стом предупреждения, в аргументе category передается класс предупре- ждения (такой как DeprecationWarning), а в аргументе stacklevel передается целое число, определяющее кадр стека, в котором должно возбуждаться предупреждение. По умолчанию в аргументе category передается класс
UserWarning
, а в аргументе stacklevel – число 1.
warn_explicit(message, category, filename, lineno[, module[, registry]])
Низкоуровневая версия функции warn(). Аргументы message и category имеют тот же смысл, что и в функции warn(). В аргументах filename, lineno и module явно определяется местоположение предупреждения. В аргументе
registry
передается объект, представляющий все активные фильтры. Если аргумент registry опущен, вывод предупреждения не подавляется.
showwarning(message, category, filename, lineno[, file])
Выводит предупреждение message в файл file. Если аргумент file опущен, предупреждение выводится в поток sys.stderr.
formatwarning(message, category, filename, lineno)
Создает форматированную строку, которая выводится при возбуждении предупреждения.
filterwarnings(action[, message[, category[, module[, lineno[, append]]]]])
Добавляет новый элемент в список фильтров. В аргументе action передает- ся строка ‘error’, ‘ignore’, ‘always’, ‘default’, ‘once’ или ‘module’. Ниже приво- дится описание каждого из этих значений:
Действие
Описание
‘error’
Преобразует предупреждение в исключение
‘ignore’
Подавляет вывод предупреждения
‘always’
Всегда выводить текст предупреждения
‘default’
Предупреждение выводится однократно для каждого из место- положений, где оно встречается
‘module’
Предупреждение выводится однократно для каждого из моду- лей, где оно встречается
‘once’
Предупреждение выводится однократно, независимо от того, где оно возникло
В аргументе message передается строка с регулярным выражением, которое будет сопоставляться с текстом сообщения. В аргументе category передает- ся класс предупреждения, такой как DeprecationError. В аргументе module

Модуль weakref
305
передается строка с регулярным выражением, которое будет сопоставлять- ся с именем модуля. В аргументе lineno передается номер строки или 0, где нулевое значение соответствует всем строкам. Аргумент append определяет, должен ли фильтр добавляться в конец списка всех фильтров (то есть он будет проверяться последним). По умолчанию новые фильтры добавляют- ся в начало списка фильтров. Если какой-либо из аргументов опущен, ему по умолчанию присваивается значение, соответствующее всем предупре- ждениям.
resetwarnings()
Сбрасывает все фильтры предупреждений. При этом уничтожаются все фильтры, созданные ранее вызовом функции filterwarnings(), а также за- данные в параметре –W.
Примечания
• Список активных фильтров находится в переменной warnings.filters.
• Когда предупреждение преобразуется в исключение, категория преду- преждения становится типом исключения. Например, при преобразо- вании предупреждения DeprecationWarning в ошибку будет возбуждено исключение DeprecationWarning.
• Определить фильтры в командной строке можно с помощью параме- тра –W. В общем виде этот параметр имеет следующий формат:
-Waction:message:category:module:lineno где каждый аргумент имеет тот же смысл, что и в функции filterwarn- ing()
. Однако в данном случае поля message и module определяются не как регулярные выражения, а как подстроки из начала текста предупре- ждения и имени модуля, предназначенные для фильтрации.
Модуль weakref
Модуль weakref обеспечивает поддержку слабых ссылок. В обычном случае сохранение ссылки на объект приводит к увеличению счетчика ссылок, что препятствует уничтожению объекта, пока значение счетчика не до- стигнет нуля. Слабая ссылка позволяет обращаться к объекту, не увели- чивая его счетчик ссылок. Это может пригодиться в некоторых случаях, когда требуется организовать управление объектами необычными способа- ми. Например, в объектно-ориентированных программах, если требуется реализовать отношения между объектами, как в шаблоне проектирования
«Наблюдатель» (Observer), чтобы избежать циклических ссылок, можно использовать слабые ссылки. Пример такой реализации приводится в раз- деле «Управление памятью объектов» главы 7.
Создается слабая ссылка с помощью функции weakref.ref(), как показано ниже:
>>> class A: pass
>>> a = A()
>>> ar = weakref.ref(a) # Создаст слабую ссылку на a

306
Глава 13. Службы Python времени выполнения
>>> print ar

После получения слабой ссылки доступ к оригинальному объекту можно будет получить простым обращением к слабой ссылке, как к функции без аргументов. Если объект все еще существует, функция вернет его. В про- тивном случае она вернет None, как признак того, что оригинальный объект больше не существует. Например:
>>> print ar() # Выведет оригинальный объект
<__main__.A instance at 12ce0c>
>>> del a # Удалит оригинальный объект
>>> print ar() # Объект a был удален, поэтому теперь возвращается None
None
>>>
В модуле weakref объявлены следующие функции:
ref(object[, callback])
Создает слабую ссылку на объект object. В необязательном аргументе
callback
передается функция, которая должна вызываться перед удале- нием объекта object. Эта функция должна принимать единственный аргу- мент, в котором ей будет передаваться слабая ссылка на объект. На один и тот же объект может указывать сразу несколько слабых ссылок. В этом случае функции callback будут вызываться в порядке, обратном порядку создания слабых ссылок – от более свежих к более старым. Доступ к объ- екту object можно получить, обратившись к слабой ссылке как к функции без аргументов. Если оригинальный объект был удален, функция вернет
None
. Функция ref() в действительности принадлежит к типу ReferenceType, который может использоваться в операциях проверки типов и создания производных классов.
proxy(object[, callback])
Создает прокси-объект со слабой ссылкой на заданный объект object. Воз- вращаемый объект в действительности является оберткой вокруг ори- гинального объекта, обеспечивающей доступ к его атрибутам и методам.
Пока будет существовать оригинальный объект, прокси-объект будет ими- тировать его поведение. Однако после уничтожения оригинального объек- та любая попытка обращения к прокси-объекту будет возбуждать исклю- чение weakref.ReferenceError, чтобы показать, что оригинальный объект был удален. В аргументе callback передается функция обратного вызова, имею- щая то же назначение, что и в функции ref(). Прокси-объект может иметь тип либо ProxyType, либо CallableProxyType, в зависимости от того, является ли оригинальный объект вызываемым объектом.
getweakrefcount(object)
Возвращает количество слабых ссылок и объектов-оберток, указывающих на объект object.
getweakrefs(object)
Возвращает список всех слабых ссылок и объектов-оберток, указывающих на объект object.

Модуль weakref
307
WeakKeyDictionary([dict])
Создает словарь, в котором ключи представлены слабыми ссылками. Ког- да количество обычных ссылок на объект ключа становится равным нулю, соответствующий элемент словаря автоматически удаляется. В необяза- тельном аргументе dict передается словарь, элементы которого добавля- ются в возвращаемый объект типа WeakKeyDictionary. Поскольку слабые ссылки могут создаваться только для объектов определенных типов, суще- ствует большое число ограничений на допустимые типы объектов ключей.
В частности, встроенные строки не могут использоваться в качестве клю- чей со слабыми ссылками. Однако экземпляры пользовательских классов, объявляющих метод __hash__(), могут играть роль ключей. Экземпляры класса WeakKeyDictionary имеют два дополнительных метода, iterkeyrefs() и keyrefs(), которые возвращают слабые ссылки на ключи.
WeakValueDictionary([dict])
Создает словарь, в котором значения представлены слабыми ссылками.
Когда количество обычных ссылок на объект значения становится рав- ным нулю, соответствующий элемент словаря автоматически удаляется.
В необязательном аргументе dict передается словарь, элементы которого добавляются в возвращаемый объект типа WeakValueDictionary. Экземпля- ры класса WeakValueDictionary имеют два дополнительных метода, itervalu- valu- erefs()
и valuerefs(), которые возвращают слабые ссылки на значения.
ProxyTypes
Это кортеж (ProxyType, CallableProxyType), который может использоваться для проверки на принадлежность объекта к одному из типов прокси-объ ек- тов, создаваемых функцией proxy(), например isinstance(object, Proxy Types).
Пример
Одно из применений слабых ссылок – создание кэшей недавно вычислен- ных результатов. Например, когда функции требуется достаточно продол- жительное время для вычисления результата, имеет смысл кэшировать эти результаты и повторно использовать их, пока они используются где- нибудь в приложении. Например:
_resultcache = { }
def foocache(x):
if resultcache.has_key(x):
r = _resultcache[x]() # Получение слабой ссылки и ее разыменование if r is not None: return r r = foo(x)
_resultcache[x] = weakref.ref(r)
return r
Примечания
• Возможность создания слабых ссылок поддерживается только экзем- плярами классов, функциями, методами, множествами, фиксирован- ными множествами, объектами файлов, генераторами, объектами ти-

308
Глава 13. Службы Python времени выполнения пов и некоторыми объектами типов, объявленными в библиотечных модулях (например, сокетами, массивами и шаблонами регулярных выражений). Встроенные функции и большинство встроенных типов, таких как списки, словари, строки и числа, не позволяют создавать сла- бые ссылки на них.
• Если в программе потребуется выполнять итерации по элементам объ- ектов WeakKeyDictionary или WeakValueDictionary, следует сделать все воз- можное, чтобы обеспечить неизменность размеров словаря, так как это может приводить к странным побочным эффектам, например к мисти- ческому исчезновению элементов словаря без всяких видимых причин.
• Если в процессе выполнения функции обратного вызова, зарегистриро- ванной с помощью функции ref() или proxy(), будет возбуждено исклю- чение, оно будет выведено в поток стандартного вывода сообщений об ошибках и проигнорировано.
• Слабые ссылки являются хешируемыми, если оригинальный объект также является хешируемым. Кроме того, слабая ссылка будет продол- жать хранить свое значение хеша даже после удаления оригинального объекта, при условии, что оно будет вычислено, пока объект существует.
• Слабые ссылки могут проверяться на равенство, но для них не суще- ствует понятий «больше» или «меньше». Если оригинальные объекты продолжают существовать, ссылки будут определяться как равные, если оригинальные объекты имеют одно и то же значение или ссылки указывают на один и тот же объект.

1   ...   20   21   22   23   24   25   26   27   ...   82


написать администратору сайта