Документация Python неофициальный перевод

marshal.md

90 строк · 7.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.6/c-api/marshal.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Поддержка маршалинга данных89Эти функции позволяют коду на C работать с сериализованными объектами, используя тот же формат данных, что и модуль [`marshal`](https://python-all.ru/2.6/library/marshal.html#module-marshal). Имеются функции для записи данных в формат сериализации, а также дополнительные функции, которые можно использовать для чтения данных обратно. Файлы для хранения маршалированных данных должны открываться в двоичном режиме.1011Числовые значения хранятся с младшим байтом первым.1213Модуль поддерживает две версии формата данных: версия 0 – историческая, версия 1 (добавлена в Python 2.4) использует общие интернированные строки в файле и при демаршалинге. Версия 2 (добавлена в Python 2.5) использует двоичный формат для чисел с плавающей запятой. *Py\_MARSHAL\_VERSION* указывает текущий формат файла (в настоящее время 2).1415**void `PyMarshal_WriteLongToFile`(long *value*, FILE *\*file*, int *version*)**1617Маршалирует целое число `long` *value* в файл *file*. Будут записаны только младшие 32 бита *value* вне зависимости от размера родного типа `long`.1819Изменено в версии 2.4: *version* указывает формат файла.2021**void `PyMarshal_WriteObjectToFile`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*value*, FILE *\*file*, int *version*)**2223Маршалирует объект Python, *value*, в *file*.2425Изменено в версии 2.4: *version* указывает формат файла.2627**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyMarshal_WriteObjectToString`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*value*, int *version*)**2829*Возвращаемое значение: новая ссылка.*3031Возвращает строковый объект, содержащий маршалированное представление *value*.3233Изменено в версии 2.4: *version* указывает формат файла.3435Следующие функции позволяют считывать маршалированные значения обратно.3637XXX А как насчёт обнаружения ошибок? Похоже, что чтение за концом файла всегда приводит к отрицательному числовому значению (там, где это имеет смысл), но неясно, будут ли отрицательные значения корректно обрабатываться, если ошибки нет. Как определить это правильно? Следует ли записывать только неотрицательные значения с помощью этих процедур?3839**long `PyMarshal_ReadLongFromFile`(FILE *\*file*)**4041Возвращает значение типа4243`long`4445в языке C из потока данных в4647`FILE*`4849, открытом для чтения. С помощью этой функции можно прочитать только 32-битное значение, независимо от нативного размера5051`long`5253.5455**int `PyMarshal_ReadShortFromFile`(FILE *\*file*)**5657Возвращает значение типа5859`short`6061в языке C из потока данных в6263`FILE*`6465, открытом для чтения. С помощью этой функции можно прочитать только 16-битное значение, независимо от нативного размера6667`short`6869.7071**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyMarshal_ReadObjectFromFile`(FILE *\*file*)**7273*Возвращаемое значение: новая ссылка.*7475Возвращает объект Python из потока данных в `FILE*`, открытом для чтения. В случае ошибки устанавливает соответствующее исключение ([`EOFError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.EOFError) или [`TypeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.TypeError)) и возвращает *NULL*.7677**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyMarshal_ReadLastObjectFromFile`(FILE *\*file*)**7879*Возвращаемое значение: новая ссылка.*8081Возвращает объект Python из потока данных в `FILE*`, открытом для чтения. В отличие от [`PyMarshal_ReadObjectFromFile()`](https://python-all.ru/2.6/c-api/marshal.html#PyMarshal_ReadObjectFromFile), эта функция предполагает, что из файла больше не будет читаться никаких объектов, что позволяет ей агрессивно загружать данные файла в память, чтобы десериализация могла работать с данными в памяти, а не читать по байту из файла. Используйте этот вариант, только если вы уверены, что не будете читать ничего другого из этого файла. В случае ошибки устанавливает соответствующее исключение ([`EOFError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.EOFError) или [`TypeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.TypeError)) и возвращает *NULL*.8283**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyMarshal_ReadObjectFromString`(char *\*string*, Py\_ssize\_t *len*)**8485*Возвращаемое значение: новая ссылка.*8687Возвращает объект Python из потока данных в символьном буфере, содержащем *len* байт, на которые указывает *string*. В случае ошибки устанавливает соответствующее исключение ([`EOFError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.EOFError) или [`TypeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.TypeError)) и возвращает *NULL*.8889Изменено в версии 2.5: Ранее эта функция использовала тип `int` для параметра *len*. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.90