bytes.md
1> **Источник:** https://python-all.ru/3.0/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.0/library/exceptions.html#exceptions.TypeError), когда ожидают параметр bytes, а вызываются с параметром, не являющимся bytes.1011**\[PyBytesObject\]`PyBytesObject`**1213Этот подтип1415[`PyObject`](https://python-all.ru/3.0/c-api/structures.html#PyObject)1617представляет объект bytes Python.1819**\[PyBytes\_Type\][PyTypeObject](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) `PyBytes_Type`**2021Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) представляет тип bytes в Python; он является тем же объектом, что и `bytes` на уровне Python. .2223**\[PyBytes\_Check\]int `PyBytes_Check`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**2425Возвращает истину, если объект2627*o*2829является объектом bytes или экземпляром подтипа типа bytes.3031**\[PyBytes\_CheckExact\]int `PyBytes_CheckExact`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**3233Возвращает истину, если объект3435*o*3637является объектом bytes, но не экземпляром подтипа типа bytes.3839**\[PyBytes\_FromString\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyBytes_FromString`(const char *\*v*)**4041Возвращает новый объект bytes с копией строки4243*v*4445в качестве значения в случае успеха и4647*NULL*4849в случае ошибки. Параметр5051*v*5253не должен быть5455*NULL*5657; он не будет проверяться.5859**\[PyBytes\_FromStringAndSize\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyBytes_FromStringAndSize`(const char *\*v*, Py\_ssize\_t *len*)**6061Возвращает новый объект bytes с копией строки6263*v*6465в качестве значения и длины6667*len*6869при успехе, и7071*NULL*7273при ошибке. Если7475*v*7677равно7879*NULL*8081, содержимое объекта bytes не инициализировано.8283**\[PyBytes\_FromFormat\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyBytes_FromFormat`(const char *\*format*, ...)**8485Take a C `printf`-style *format* string and a variable number of arguments, calculate the size of the resulting Python bytes object and return a bytes object with the values formatted into it. The variable arguments must be C types and must correspond exactly to the format characters in the *format* string. The following format characters are allowed:8687| Символы формата | Тип | Описание |88| --- | --- | --- |89| `%%` | *н/д* | Буквальный символ %. |90| `%c` | int | Одиночный символ, представленный как C int. |91| `%d` | int | Полностью эквивалентно `printf("%d")`. |92| `%u` | беззнаковый int | Полностью эквивалентно `printf("%u")`. |93| `%ld` | long | Полностью эквивалентно `printf("%ld")`. |94| `%lu` | беззнаковый long | Полностью эквивалентно `printf("%lu")`. |95| `%zd` | Py\_ssize\_t | Полностью эквивалентно `printf("%zd")`. |96| `%zu` | size\_t | Полностью эквивалентно `printf("%zu")`. |97| `%i` | int | Полностью эквивалентно `printf("%i")`. |98| `%x` | int | Полностью эквивалентно `printf("%x")`. |99| `%s` | char\* | Нуль-терминированный массив символов C. |100| `%p` | void\* | Шестнадцатеричное представление указателя C. В основном эквивалентно `printf("%p")` за исключением того, что гарантированно начинается с литерала `0x` независимо от того, что выдает `printf` на данной платформе. |101102Нераспознанный символ формата приводит к тому, что вся оставшаяся строка формата копируется как есть в результирующую строку, а все лишние аргументы отбрасываются.103104**\[PyBytes\_FromFormatV\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyBytes_FromFormatV`(const char *\*format*, va\_list *vargs*)**105106Идентична107108[`PyBytes_FromFormat()`](https://python-all.ru/3.0/c-api/bytes.html#PyBytes_FromFormat)109110за исключением того, что принимает ровно два аргумента.111112**\[PyBytes\_FromObject\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyBytes_FromObject`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**113114Возвращает байтовое представление объекта115116*o*117118, реализующего протокол буфера.119120**\[PyBytes\_Size\]Py\_ssize\_t `PyBytes_Size`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**121122Возвращает длину байтов в байтовом объекте123124*o*125126.127128**\[PyBytes\_GET\_SIZE\]Py\_ssize\_t `PyBytes_GET_SIZE`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**129130Макроформа131132[`PyBytes_Size`](https://python-all.ru/3.0/c-api/bytes.html#PyBytes_Size)133134, но без проверки ошибок.135136**\[PyBytes\_AsString\]char\* `PyBytes_AsString`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**137138Возвращает NUL-терминированное представление содержимого139140*o*141142. Указатель ссылается на внутренний буфер143144*o*145146, а не на копию. Данные нельзя изменять, если только строка не была только что создана с помощью147148`PyBytes_FromStringAndSize(NULL, size)`149150. Её нельзя освобождать. Если151152*o*153154вообще не является строковым объектом,155156[`PyBytes_AsString`](https://python-all.ru/3.0/c-api/bytes.html#PyBytes_AsString)157158возвращает159160*NULL*161162и возбуждает163164[`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError)165166.167168**\[PyBytes\_AS\_STRING\]char\* `PyBytes_AS_STRING`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*string*)**169170Макроформа171172[`PyBytes_AsString`](https://python-all.ru/3.0/c-api/bytes.html#PyBytes_AsString)173174, но без проверки ошибок.175176**\[PyBytes\_AsStringAndSize\]int `PyBytes_AsStringAndSize`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*obj*, char *\*\*buffer*, Py\_ssize\_t *\*length*)**177178Возвращает представление содержимого объекта *obj*, завершающееся NUL, через выходные переменные *buffer* и *length*.179180Если *length* равен *NULL*, результирующий буфер может не содержать NUL-символы; если же содержит, функция возвращает `-1` и возбуждается [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError).181182Буфер ссылается на внутренний строковый буфер *obj*, а не на копию. Данные нельзя изменять, если только строка не была только что создана с помощью `PyBytes_FromStringAndSize(NULL, size)`. Её нельзя освобождать. Если *string* вообще не является строковым объектом, [`PyBytes_AsStringAndSize`](https://python-all.ru/3.0/c-api/bytes.html#PyBytes_AsStringAndSize) возвращает `-1` и возбуждает [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError).183184**\[PyBytes\_Concat\]void `PyBytes_Concat`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*\*bytes*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*newpart*)**185186Создаёт новый объект bytes в187188*\*bytes*189190, содержащий содержимое191192*newpart*193194, добавленное к195196*bytes*197198; вызывающий получает владение новой ссылкой. Ссылка на старое значение199200*bytes*201202будет украдена. Если новую строку не удалось создать, старая ссылка на203204*bytes*205206всё равно будет отброшена, а значение207208*\*bytes*209210будет установлено в211212*NULL*213214; будет установлено соответствующее исключение.215216**\[PyBytes\_ConcatAndDel\]void `PyBytes_ConcatAndDel`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*\*bytes*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*newpart*)**217218Создаёт новый строковый объект в219220*\*bytes*221222, содержащий содержимое223224*newpart*225226, добавленное к227228*bytes*229230. В этой версии уменьшается счётчик ссылок на231232*newpart*233234.235236**\[\_PyBytes\_Resize\]int `_PyBytes_Resize`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*\*bytes*, Py\_ssize\_t *newsize*)**237238Способ изменить размер объекта bytes, несмотря на то, что он «неизменяемый». Используйте это только для создания нового объекта bytes; не используйте, если объект bytes уже может быть известен в других частях кода. Вызов этой функции является ошибкой, если счётчик ссылок на входной объект bytes не равен единице. Передайте адрес существующего объекта bytes как lvalue (в него может быть произведена запись) и желаемый новый размер. В случае успеха239240*\*bytes*241242содержит изменённый объект bytes и возвращается243244`0`245246; адрес в247248*\*bytes*249250может отличаться от входного значения. Если перераспределение памяти не удаётся, исходный объект bytes по адресу251252*\*bytes*253254освобождается,255256*\*bytes*257258устанавливается в259260*NULL*261262, устанавливается исключение памяти, и возвращается263264`-1`265266.267268**\[PyBytes\_Format\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyBytes_Format`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*format*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*args*)**269270Возвращает новый объект bytes из271272*format*273274и275276*args*277278. Аналог279280`format % args`281282. Аргумент283284*args*285286должен быть кортежем.287