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

справочник по 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
страница23 из 82
1   ...   19   20   21   22   23   24   25   26   ...   82
getsourcefile(object)
Возвращает имя файла с исходным программным кодом на языке Python, где находится определение объекта object.
getsourcelines(object)
Возвращает кортеж (sourcelines, firstline), соответствующий определе- соответствующий определе- определе- определе- нию объекта object. Поле sourcelines – список строк с исходным программ- ным кодом, а поле firstline – номер первой строки с исходным программ- ным кодом. Если исходный код невозможно получить, возбуждает исклю- чение IOError.
getsource(object)
Возвращает исходный программный код объекта object в виде единствен- ной строки. Если исходный код невозможно получить, возбуждает исклю- чение IOError.

Модуль inspect
287
isabstract(object)
Возвращает True, если объект object является абстрактным базовым клас- сом.
isbuiltin(object)
Возвращает True, если объект object является встроенной функцией.
isclass(object)
Возвращает True, если объект object является классом.
iscode(object)
Возвращает True, если объект object является объектом с программным ко- дом.
isdatadescriptor(object)
Возвращает True, если объект object является дескриптором данных. Тако- выми считаются объекты, определяющие оба метода: __get__() и __set__().
isframe(object)
Возвращает True, если объект object является кадром стека.
isfunction(object)
Возвращает True, если объект object является функцией.
isgenerator(object)
Возвращает True, если объект object является генератором.
isgeneratorfunction(object)
Возвращает True, если объект object является функцией-генератором. От- личие от функции isgenerator() состоит в том, что данная функция прове- ряет, является ли объект функцией, которая при вызове создает генератор.
Не может использоваться для проверки, является ли генератор активным.
ismethod(object)
Возвращает True, если объект object является методом.
ismethoddescriptor(object)
Возвращает True, если объект object является дескриптором метода. Тако- является дескриптором метода. Тако- дескриптором метода. Тако- дескриптором метода. Тако- метода. Тако- метода. Тако-
. Тако-
Тако- выми считаются объекты, не являющиеся методами класса и определяю- щие метод __get__(), но не определяющие метод __set__().
ismodule(object)
Возвращает True, если объект object является модулем.
isroutine(object)
Возвращает True, если объект object является пользовательской или встро- енной функцией или методом.
istraceback(object)
Возвращает True, если объект object является объектом с трассировочной информацией.

288
Глава 13. Службы Python времени выполнения
stack([context])
Возвращает список записей, соответствующих текущему кадру стека.
Каждая запись является кортежем из 6 элементов (frame, filename, lineno,
funcname, code_context, index)
, содержащих ту же информацию, которая возвращается функцией getinnerframes(). Аргумент context определяет ко- личество строк контекста, которые должны возвращаться для каждой за- писи кадра.
trace([context])
Возвращает список записей для кадров стека между текущим кадром и ка- дром, в котором возникло исключение. Первая запись соответствует теку- щей функции, а последняя – кадру, в котором возникло исключение. Ар- гумент context определяет количество строк контекста, которые должны возвращаться для каждой записи кадра.
Модуль marshal
Модуль marshal используется для сериализации объектов в «недокумен- тированные» форматы представления данных, используемые в языке Py-
Py- thon. Модуль marshal похож на модули pickle и shelve, но обладает меньши- ми возможностями и может использоваться только при работе с простыми объектами. Он вообще не должен использоваться для реализации сохра- нения объектов (для этого лучше использовать модуль pickle). Однако при работе с простыми встроенными типами модуль marshal обеспечивает очень быстрый способ сохранения и загрузки данных.
dump(value, file [, version])
Сохраняет объект value в объекте file открытого файла. Если объект value относится к неподдерживаемым типам, возбуждается исключение ValueEr- ror
. Аргумент version – целое число, определяющее используемый формат данных. Код формата по умолчанию определяется переменной marshal.ver-
.ver- ver- sion и в настоящее время имеет значение 2. Версия 0 – это устаревший фор- мат, использовавшийся более ранними версиями Python.
dumps(value [,version])
Возвращает строку, записанную функцией dump(). Если объект value отно- сится к неподдерживаемым типам, возбуждается исключение ValueError.
Назначение аргумента version описано выше.
load(file)
Читает и возвращает следующее значение из объекта file открытого фай- ла. Если функции не удалось прочитать допустимое значение, будет воз- буждено исключение EOFError, ValueError или TypeError. Формат данных в файле определяется автоматически.
loads(string)
Читает и возвращает следующее значение из строки string.

Модуль pickle
289
Примечания
• Данные сохраняются в платформонезависимом формате.
• Поддерживаются только None, целые числа, длинные целые числа, чис- ла с плавающей точкой, комплексные числа, строки, строки Юникода, кортежи, списки, словари и объекты с программным кодом. Списки, кортежи и словари могут содержать только объекты поддерживаемых типов. Экземпляры классов и рекурсивные ссылки в списках, корте- жах и словарях не поддерживаются.
• Целые числа могут быть преобразованы в длинные целые, если встроен- ный тип int не обладает достаточной точностью для их представления, например если сериализованное целое число содержит 64 бита, а чтение выполняется на платформе, поддерживающей 32-битные целые числа.
• Модуль marshal не обеспечивает защиту от ошибочных или злонамерен- ных данных и не должен использоваться для чтения данных, получен- ных из непроверенных источников.
• Модуль marshal имеет значительно более высокую производительность, чем модуль pickle, и имеет менее широкие возможности.
Модуль pickle
Модуль pickle используется для преобразования объектов Python в после-
Python в после- в после- довательность байтов, пригодную для сохранения в файле, в базе данных или для передачи по сети. Этот процесс называют по-разному: сериализа-
цией
или маршаллингом. Получающаяся последовательность байтов мо- жет быть снова преобразована в серию объектов Python в процессе восста-
Python в процессе восста- в процессе восста- новления.
Ниже перечислены функции, которые могут использоваться для преобра- зования объектов в последовательности байтов.
dump(object, file [, protocol ])
Выводит сериализованное представление объекта object в объект файла
file
. Аргумент protocol определяет формат выводимых данных. Протокол
0 (по умолчанию) – это текстовый формат, обратно совместимый с более ранними версиями Python. Протокол 1 – это двоичный формат, который также совместим с большинством предыдущих версий Python. Протокол
2 – это самый новый формат, который обеспечивает наиболее эффектив- ный способ сохранения классов и экземпляров. Протокол 3 используется в Python 3 и несовместим с предыдущими версиями интерпретатора. Если в аргументе protocol передается отрицательное значение, выбирается наи- более современный протокол. Самая последняя версия протокола хранит- ся в переменной pickle.HIGHEST_PROTOCOL. Если объект не поддерживает воз- можность сериализации, возбуждается исключение pickle.PicklingError.
dumps(object [, protocol])
То же, что и функция dump(), но возвращает строку, содержащую сериали- зованные данные.

290
Глава 13. Службы Python времени выполнения
Следующий пример демонстрирует, как можно было бы использовать эти функции для сохранения объектов в файле:
f = open(‘myfile’, ‘wb’)
pickle.dump(x, f)
pickle.dump(y, f)
...
сохранить еще объекты ...
f.close()
Следующие функции могут использоваться для восстановления сериали- зованных объектов.
load(file)
Загружает сериализованное представление объекта из объекта file файла и возвращает готовый объект. Протокол указывать не требуется, так как он определяется автоматически. Если файл содержит поврежденные дан- ные, которые не могут быть декодированы, функция возбуждает исклю- чение pickle.UnpicklingError. По достижении конца файла возбуждается ис- ключение EOFError.
loads(string)
То же, что и функция load(), но сериализованное представление объекта из строки.
Следующий пример демонстрирует, как можно было бы использовать эти функции для восстановления объектов:
f = open(‘myfile’, ‘rb’)
x = pickle.load(f)
y = pickle.load(f)
...
загрузить еще объекты ...
f.close()
При выполнении загрузки не требуется указывать протокол или какую- нибудь другую информацию о типе загружаемого объекта. Эта информа- ция сохраняется вместе с сериализованными данными.
Если речь идет о сохранении более чем одного объекта, можно просто выполнить серию вызовов функции dump() и load(), как было показано в преды дущих примерах. При выполнении серии вызовов функций до- статочно просто гарантировать, что последовательность вызовов функции load()
соответствует последовательности вызовов dump(), использовавших- ся для записи объектов в файл.
Когда дело доходит до сложных структур данных с циклическими или раз- деляемыми ссылками, использование функций dump() и load() может ока- заться проблематичным, потому что они не поддерживают возможность сохранения информации об объектах, которые уже были сохранены или восстановлены. Отсутствие такой возможности может привести к чрезмер- ному увеличению размеров файлов и вызывать ошибки при восстановле- нии взаимоотношений между загруженными объектами. Альтернативный подход заключается в использовании объектов классов Pickler и Unpickler.

Модуль pickle
291
Pickler(file [, protocol ])
Создает объект, который записывает данные в объект file файла, исполь- зуя указанный протокол protocol сериализации. Экземпляр p класса Pick- ler имеет метод p.dump(x), который записывает объект x в объект file файла.
При сохранении объекта x запоминается его идентичность.
1
Если впослед- ствии повторно будет выполнена попытка сохранить объект x с помощью метода p.dump(), вместо новой копии в файл будет записана ссылка на объ- ект, сохраненный ранее. Метод p.clear_memo() очищает внутренний словарь, используемый для сохранения информации о ранее записанных объектах.
Эту возможность можно было бы использовать, чтобы записать свежую ко- пию сохраненного ранее объекта (например, если изменилось его значение с момента последнего вызова функции dump()).
Unpickler(file)
Создает объект, который читает данные из объекта file файла. Экземпляр
u
класса Unpickler имеет метод u.load(), который загружает данные из фай- ла и возвращает новый объект. Объект Unpickler запоминает объекты, кото- рые он возвращал, потому что исходный файл может содержать ссылки на объекты, сохраненные объектом Pickler. В этом случае метод u.load() воз- вращает ссылку на ранее загруженный объект.
Модуль pickle может работать с большинством разновидностей обычных объектов Python, включая:
• None
• Числа и строки
• Кортежи, списки и словари, содержащие объекты только тех типов, ко- торые поддерживаются модулем pickle
• Экземпляры пользовательских классов, объявленных в модуле на верх- нем уровне
Когда сохраняются экземпляры пользовательских классов, данные об экземпляре – единственная информация, которая сохраняется. Соответ- ствующее определение класса не сохраняется, вместо этого сохраненные данные просто содержат имя соответствующего класса и имя модуля, где этот класс объявлен. Когда происходит восстановление такого экземпляра, автоматически выполняется импортирование модуля, в котором находит- ся объявление класса, – для получения доступа к определению класса при воссоздании экземпляра. Следует также отметить, что при восстановлении экземпляра метод __init__() класса не вызывается. Воссоздание и восста- новление данных в экземпляре производится другими способами.
Одно из ограничений, накладываемых на экземпляры классов, заключает- ся в том, что соответствующие определения классов должны находиться на верхнем уровне модуля (то есть это не могут быть вложенные классы). Кро- ме того, если определение класса экземпляра первоначально было выпол- нено в модуле __main__, оно должно быть загружено вручную, до попытки восстановления сохраненного объекта (поскольку интерпретатор не знает,
1
Числовой идентификатор. – Прим. перев.

292
Глава 13. Службы Python времени выполнения как автоматически загрузить определение требуемого класса обратно в мо- дуль __main__ в процессе восстановления).
Обычно не требуется делать что-то особенное с пользовательскими клас- сами, чтобы обеспечить их совместимость с модулем pickle. Однако класс может предоставлять собственные версии методов сохранения и восста- новления информации о своем состоянии, реализовав специальные ме- тоды __getstate__() и __setstate__(). Метод __getstate__() должен возвра- щать объект, пригодный для сохранения (такой как строка или кортеж), представляющий состояние оригинального объекта. Метод __setstate__() должен принимать сохраненный объект и на его основе восстанавливать оригинальный объект. Если эти методы не определены, по умолчанию со- храняется атрибут __dict__ экземпляра. Следует отметить, что если эти ме- тоды определены, они также будут использоваться модулем copy для опера- ций поверхностного и глубокого копирования.
Примечания
• В Python 2 имеется модуль cPickle, содержащий реализацию функций модуля pickle на языке C. Он обладает гораздо более высокой произво-
C. Он обладает гораздо более высокой произво-
. Он обладает гораздо более высокой произво- дительностью по сравнению с модулем pickle, но ограничивает возмож- ность создания производных классов от Pickler и Unpickler. В Python 3 также имеется модуль, содержащий реализацию на языке C, но он не используется непосредственно (модуль pickle использует его автомати- чески).
• Формат данных, используемый модулем pickle, характерен для языка
Python и не должен рассматриваться как совместимый с какими-либо внешними стандартами, такими как XML.
• Везде, где только возможно, вместо модуля marshal должен использо- ваться модуль pickle, потому что модуль pickle является более гибким, используемый им формат кодирования данных описан в документации и в нем выполняется проверка на наличие ошибок.
• Из-за проблем, связанных с безопасностью, программы не должны вос- станавливать данные из файлов, полученных из непроверенных источ- ников.
• Использование модуля pickle с типами, объявленными в модулях рас- ширений, является намного более сложной задачей, чем было описано здесь. Разработчики расширений обязательно должны ознакомиться с подробным описанием низкоуровневого протокола в электронной до- кументации, чтобы обеспечить возможность сохранения объектов с по- мощью модуля pickle. В частности, с особенностями реализации специ- альных методов __reduce__() и __reduce_ex__(), которые используются модулем pickle для создания последовательности байтов.
Модуль sys
Модуль sys содержит переменные и функции, имеющие отношение к ин- терпретатору и его окружению.

Модуль sys
293
Переменные
В модуле объявлены перечисленные далее переменные.
api_version
Целочисленное представление версии C API интерпретатора Python. Ис-
C API интерпретатора Python. Ис-
API интерпретатора Python. Ис-
API интерпретатора Python. Ис- интерпретатора Python. Ис-
Python. Ис-
. Ис- пользуется при работе с модулями расширений.
argv
Список параметров командной строки, передаваемых программе. Элемент argv[0]
хранит имя программы.
builtin_module_names
Кортеж с именами модулей, встроенных в исполняемый файл интерпрета- тора Python.
byteorder
Порядок следования байтов, используемый аппаратной платформой: ‘lit- lit- tle’
– обратный порядок следования байтов, ‘big’ – прямой.
copyright
Строка с текстом, содержащим упоминание об авторских правах.
__displayhook__
Оригинальное значение функции displayhook().
dont_write_bytecode
Логический флаг, который определяет, должен ли интерпретатор Python создавать файлы с байт-кодом (с расширением .pyc или .pyo) при импорти- ровании модулей. Начальное значение True, если интерпретатор не был вы- зван с ключом -B. Программа может изменять значение этой переменной по своему усмотрению.
dllhandle
Целочисленный идентификатор для Python DLL (используется в Windows).
__excepthook__
Оригинальное значение функции excepthook().
exec_prefix
Каталог, куда были установлены платформозависимые файлы Python.
executable
Строка, содержащая имя выполняемого файла интерпретатора.
flags
Объект, представляющий различные параметры командной строки, ко- торые были переданы при запуске самому интерпретатору Python. Ниже приводится список атрибутов объекта flags вместе с соответствующими параметрами командной строки, включающими флаги. Эти атрибуты до- ступны только для чтения.

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


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