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

bytes.md

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

1> **Источник:** https://python-all.ru/3.1/c-api/bytes.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты bytes89Эти функции возбуждают [`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError), когда ожидают параметр bytes, а вызываются с параметром, не являющимся bytes.1011**`PyBytesObject`**1213Этот подтип1415[`PyObject`](https://python-all.ru/3.1/c-api/structures.html#PyObject)1617представляет объект bytes Python.1819**[PyTypeObject](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) `PyBytes_Type`**2021Этот экземпляр2223[`PyTypeObject`](https://python-all.ru/3.1/c-api/type.html#PyTypeObject)2425представляет тип bytes Python; он является тем же объектом, что и2627[`bytes`](https://python-all.ru/3.1/library/functions.html#bytes)2829на уровне Python.3031**int `PyBytes_Check`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*o*)**3233Возвращает истину, если объект3435*o*3637является объектом bytes или экземпляром подтипа типа bytes.3839**int `PyBytes_CheckExact`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*o*)**4041Возвращает истину, если объект4243*o*4445является объектом bytes, но не экземпляром подтипа типа bytes.4647**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyBytes_FromString`(const char *\*v*)**4849Возвращает новый объект bytes с копией строки5051*v*5253в качестве значения в случае успеха и5455*NULL*5657в случае ошибки. Параметр5859*v*6061не должен быть6263*NULL*6465; он не будет проверяться.6667**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyBytes_FromStringAndSize`(const char *\*v*, Py\_ssize\_t *len*)**6869Возвращает новый объект bytes с копией строки7071*v*7273в качестве значения и длины7475*len*7677при успехе, и7879*NULL*8081при ошибке. Если8283*v*8485равно8687*NULL*8889, содержимое объекта bytes не инициализировано.9091**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyBytes_FromFormat`(const char *\*format*, ...)**9293Принимает строку *format* в стиле C `printf()` и переменное число аргументов, вычисляет размер результирующего объекта bytes Python и возвращает объект bytes с отформатированными в него значениями. Переменные аргументы должны быть типами C и должны точно соответствовать символам формата в строке *format*. Допускаются следующие символы формата:9495| Символы формата | Тип | Описание |96| --- | --- | --- |97| `%%` | *н/д* | Буквальный символ %. |98| `%c` | int | Одиночный символ, представленный как C int. |99| `%d` | int | Полностью эквивалентно `printf("%d")`. |100| `%u` | беззнаковый int | Полностью эквивалентно `printf("%u")`. |101| `%ld` | long | Полностью эквивалентно `printf("%ld")`. |102| `%lu` | беззнаковый long | Полностью эквивалентно `printf("%lu")`. |103| `%zd` | Py\_ssize\_t | Полностью эквивалентно `printf("%zd")`. |104| `%zu` | size\_t | Полностью эквивалентно `printf("%zu")`. |105| `%i` | int | Полностью эквивалентно `printf("%i")`. |106| `%x` | int | Полностью эквивалентно `printf("%x")`. |107| `%s` | char\* | Нуль-терминированный массив символов C. |108| `%p` | void\* | Шестнадцатеричное представление указателя C. В основном эквивалентно `printf("%p")` за исключением того, что гарантированно начинается с литерала `0x` независимо от того, что выдает `printf` на данной платформе. |109110Нераспознанный символ формата приводит к тому, что вся оставшаяся строка формата копируется как есть в результирующую строку, а все лишние аргументы отбрасываются.111112**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyBytes_FromFormatV`(const char *\*format*, va\_list *vargs*)**113114Идентична115116[`PyBytes_FromFormat()`](https://python-all.ru/3.1/c-api/bytes.html#PyBytes_FromFormat)117118за исключением того, что принимает ровно два аргумента.119120**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyBytes_FromObject`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*o*)**121122Возвращает байтовое представление объекта123124*o*125126, реализующего протокол буфера.127128**Py\_ssize\_t `PyBytes_Size`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*o*)**129130Возвращает длину байтов в байтовом объекте131132*o*133134.135136**Py\_ssize\_t `PyBytes_GET_SIZE`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*o*)**137138Макрос, аналогичный139140[`PyBytes_Size()`](https://python-all.ru/3.1/c-api/bytes.html#PyBytes_Size)141142, но без проверки ошибок.143144**char\* `PyBytes_AsString`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*o*)**145146Возвращает NUL-терминированное представление содержимого147148*o*149150. Указатель ссылается на внутренний буфер151152*o*153154, а не на копию. Данные нельзя изменять никаким образом, если только строка не была только что создана с помощью155156`PyBytes_FromStringAndSize(NULL, size)`157158. Её нельзя освобождать. Если159160*o*161162вообще не является строковым объектом,163164[`PyBytes_AsString()`](https://python-all.ru/3.1/c-api/bytes.html#PyBytes_AsString)165166возвращает167168*NULL*169170и возбуждает171172[`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError)173174.175176**char\* `PyBytes_AS_STRING`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*string*)**177178Макрос, аналогичный179180[`PyBytes_AsString()`](https://python-all.ru/3.1/c-api/bytes.html#PyBytes_AsString)181182, но без проверки ошибок.183184**int `PyBytes_AsStringAndSize`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*obj*, char *\*\*buffer*, Py\_ssize\_t *\*length*)**185186Возвращает представление содержимого объекта *obj*, завершающееся NUL, через выходные переменные *buffer* и *length*.187188Если *length* равен *NULL*, результирующий буфер может не содержать NUL-символы; если же содержит, функция возвращает `-1` и возбуждается [`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError).189190Буфер ссылается на внутренний строковый буфер объекта *obj*, а не на копию. Данные нельзя изменять никоим образом, если только строка не была только что создана с помощью `PyBytes_FromStringAndSize(NULL, size)`. Его нельзя освобождать. Если *string* вообще не является строковым объектом, [`PyBytes_AsStringAndSize()`](https://python-all.ru/3.1/c-api/bytes.html#PyBytes_AsStringAndSize) возвращает `-1` и возбуждает [`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError).191192**void `PyBytes_Concat`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*\*bytes*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*newpart*)**193194Создаёт новый объект bytes в195196*\*bytes*197198, содержащий содержимое199200*newpart*201202, добавленное к203204*bytes*205206; вызывающий получает владение новой ссылкой. Ссылка на старое значение207208*bytes*209210будет украдена. Если новую строку не удалось создать, старая ссылка на211212*bytes*213214всё равно будет отброшена, а значение215216*\*bytes*217218будет установлено в219220*NULL*221222; будет установлено соответствующее исключение.223224**void `PyBytes_ConcatAndDel`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*\*bytes*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*newpart*)**225226Создаёт новый строковый объект в227228*\*bytes*229230, содержащий содержимое231232*newpart*233234, добавленное к235236*bytes*237238. В этой версии уменьшается счётчик ссылок на239240*newpart*241242.243244**int `_PyBytes_Resize`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*\*bytes*, Py\_ssize\_t *newsize*)**245246Способ изменить размер объекта bytes, несмотря на то, что он «неизменяемый». Используйте это только для создания нового объекта bytes; не используйте, если объект bytes уже может быть известен в других частях кода. Вызов этой функции является ошибкой, если счётчик ссылок на входной объект bytes не равен единице. Передайте адрес существующего объекта bytes как lvalue (в него может быть произведена запись) и желаемый новый размер. В случае успеха247248*\*bytes*249250содержит изменённый объект bytes и возвращается251252`0`253254; адрес в255256*\*bytes*257258может отличаться от входного значения. Если перераспределение памяти не удаётся, исходный объект bytes по адресу259260*\*bytes*261262освобождается,263264*\*bytes*265266устанавливается в267268*NULL*269270, устанавливается исключение памяти, и возвращается271272`-1`273274.275