> **Источник:** https://python-all.ru/3.0/c-api/bytes.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Объекты bytes

Эти функции возбуждают [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError), когда ожидают параметр bytes, а вызываются с параметром, не являющимся bytes.

**\[PyBytesObject\]`PyBytesObject`**

Этот подтип

[`PyObject`](https://python-all.ru/3.0/c-api/structures.html#PyObject)

представляет объект bytes Python.

**\[PyBytes\_Type\][PyTypeObject](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) `PyBytes_Type`**

Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) представляет тип bytes в Python; он является тем же объектом, что и `bytes` на уровне Python. .

**\[PyBytes\_Check\]int `PyBytes_Check`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**

Возвращает истину, если объект

*o*

является объектом bytes или экземпляром подтипа типа bytes.

**\[PyBytes\_CheckExact\]int `PyBytes_CheckExact`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**

Возвращает истину, если объект

*o*

является объектом bytes, но не экземпляром подтипа типа bytes.

**\[PyBytes\_FromString\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyBytes_FromString`(const char *\*v*)**

Возвращает новый объект bytes с копией строки

*v*

в качестве значения в случае успеха и

*NULL*

в случае ошибки. Параметр

*v*

не должен быть

*NULL*

; он не будет проверяться.

**\[PyBytes\_FromStringAndSize\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyBytes_FromStringAndSize`(const char *\*v*, Py\_ssize\_t *len*)**

Возвращает новый объект bytes с копией строки

*v*

в качестве значения и длины

*len*

при успехе, и

*NULL*

при ошибке. Если

*v*

равно

*NULL*

, содержимое объекта bytes не инициализировано.

**\[PyBytes\_FromFormat\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyBytes_FromFormat`(const char *\*format*, ...)**

Take 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:

| Символы формата | Тип | Описание |
| --- | --- | --- |
| `%%` | *н/д* | Буквальный символ %. |
| `%c` | int | Одиночный символ, представленный как C int. |
| `%d` | int | Полностью эквивалентно `printf("%d")`. |
| `%u` | беззнаковый int | Полностью эквивалентно `printf("%u")`. |
| `%ld` | long | Полностью эквивалентно `printf("%ld")`. |
| `%lu` | беззнаковый long | Полностью эквивалентно `printf("%lu")`. |
| `%zd` | Py\_ssize\_t | Полностью эквивалентно `printf("%zd")`. |
| `%zu` | size\_t | Полностью эквивалентно `printf("%zu")`. |
| `%i` | int | Полностью эквивалентно `printf("%i")`. |
| `%x` | int | Полностью эквивалентно `printf("%x")`. |
| `%s` | char\* | Нуль-терминированный массив символов C. |
| `%p` | void\* | Шестнадцатеричное представление указателя C. В основном эквивалентно `printf("%p")` за исключением того, что гарантированно начинается с литерала `0x` независимо от того, что выдает `printf` на данной платформе. |

Нераспознанный символ формата приводит к тому, что вся оставшаяся строка формата копируется как есть в результирующую строку, а все лишние аргументы отбрасываются.

**\[PyBytes\_FromFormatV\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyBytes_FromFormatV`(const char *\*format*, va\_list *vargs*)**

Идентична

[`PyBytes_FromFormat()`](https://python-all.ru/3.0/c-api/bytes.html#PyBytes_FromFormat)

за исключением того, что принимает ровно два аргумента.

**\[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*)**

Возвращает байтовое представление объекта

*o*

, реализующего протокол буфера.

**\[PyBytes\_Size\]Py\_ssize\_t `PyBytes_Size`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**

Возвращает длину байтов в байтовом объекте

*o*

.

**\[PyBytes\_GET\_SIZE\]Py\_ssize\_t `PyBytes_GET_SIZE`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**

Макроформа

[`PyBytes_Size`](https://python-all.ru/3.0/c-api/bytes.html#PyBytes_Size)

, но без проверки ошибок.

**\[PyBytes\_AsString\]char\* `PyBytes_AsString`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**

Возвращает NUL-терминированное представление содержимого

*o*

. Указатель ссылается на внутренний буфер

*o*

, а не на копию. Данные нельзя изменять, если только строка не была только что создана с помощью

`PyBytes_FromStringAndSize(NULL, size)`

. Её нельзя освобождать. Если

*o*

вообще не является строковым объектом,

[`PyBytes_AsString`](https://python-all.ru/3.0/c-api/bytes.html#PyBytes_AsString)

возвращает

*NULL*

и возбуждает

[`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError)

.

**\[PyBytes\_AS\_STRING\]char\* `PyBytes_AS_STRING`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*string*)**

Макроформа

[`PyBytes_AsString`](https://python-all.ru/3.0/c-api/bytes.html#PyBytes_AsString)

, но без проверки ошибок.

**\[PyBytes\_AsStringAndSize\]int `PyBytes_AsStringAndSize`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*obj*, char *\*\*buffer*, Py\_ssize\_t *\*length*)**

Возвращает представление содержимого объекта *obj*, завершающееся NUL, через выходные переменные *buffer* и *length*.

Если *length* равен *NULL*, результирующий буфер может не содержать NUL-символы; если же содержит, функция возвращает `-1` и возбуждается [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError).

Буфер ссылается на внутренний строковый буфер *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).

**\[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*)**

Создаёт новый объект bytes в

*\*bytes*

, содержащий содержимое

*newpart*

, добавленное к

*bytes*

; вызывающий получает владение новой ссылкой. Ссылка на старое значение

*bytes*

будет украдена. Если новую строку не удалось создать, старая ссылка на

*bytes*

всё равно будет отброшена, а значение

*\*bytes*

будет установлено в

*NULL*

; будет установлено соответствующее исключение.

**\[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*)**

Создаёт новый строковый объект в

*\*bytes*

, содержащий содержимое

*newpart*

, добавленное к

*bytes*

. В этой версии уменьшается счётчик ссылок на

*newpart*

.

**\[\_PyBytes\_Resize\]int `_PyBytes_Resize`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*\*bytes*, Py\_ssize\_t *newsize*)**

Способ изменить размер объекта bytes, несмотря на то, что он «неизменяемый». Используйте это только для создания нового объекта bytes; не используйте, если объект bytes уже может быть известен в других частях кода. Вызов этой функции является ошибкой, если счётчик ссылок на входной объект bytes не равен единице. Передайте адрес существующего объекта bytes как lvalue (в него может быть произведена запись) и желаемый новый размер. В случае успеха

*\*bytes*

содержит изменённый объект bytes и возвращается

`0`

; адрес в

*\*bytes*

может отличаться от входного значения. Если перераспределение памяти не удаётся, исходный объект bytes по адресу

*\*bytes*

освобождается,

*\*bytes*

устанавливается в

*NULL*

, устанавливается исключение памяти, и возвращается

`-1`

.

**\[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*)**

Возвращает новый объект bytes из

*format*

и

*args*

. Аналог

`format % args`

. Аргумент

*args*

должен быть кортежем.
