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

---

# Протокол чисел

**int `PyNumber_Check`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

Возвращает

`1`

, если объект

*o*

предоставляет числовые протоколы, и false в противном случае. Эта функция всегда завершается успешно.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Add`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат сложения *o1* и *o2* или *NULL* в случае ошибки. Это эквивалент выражения Python `o1 + o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Subtract`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат вычитания *o2* из *o1* или *NULL* в случае ошибки. Это эквивалент выражения Python `o1 - o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Multiply`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат умножения *o1* и *o2* или *NULL* в случае ошибки. Это эквивалент выражения Python `o1 * o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Divide`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат деления *o1* на *o2* или *NULL* в случае ошибки. Это эквивалент выражения Python `o1 / o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_FloorDivide`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает целую часть от деления *o1* на *o2* или *NULL* в случае ошибки. Эквивалентно «классическому» делению целых чисел.

Новое в версии 2.2.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_TrueDivide`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает разумное приближение математического значения от деления *o1* на *o2* или *NULL* в случае ошибки. Возвращаемое значение является «приблизительным», потому что числа с плавающей запятой в двоичном представлении приблизительны; невозможно представить все действительные числа в двоичной системе. Эта функция может вернуть значение с плавающей запятой, если ей переданы два целых числа.

Новое в версии 2.2.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Remainder`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает остаток от деления *o1* на *o2* или *NULL* в случае ошибки. Это эквивалент выражения Python `o1 % o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Divmod`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

См. встроенную функцию [`divmod()`](https://python-all.ru/2.6/library/functions.html#divmod). Возвращает *NULL* в случае ошибки. Это эквивалент выражения Python `divmod(o1, o2)`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Power`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o3*)**

*Возвращаемое значение: новая ссылка.*

См. встроенную функцию [`pow()`](https://python-all.ru/2.6/library/functions.html#pow). Возвращает *NULL* в случае ошибки. Это эквивалент выражения Python `pow(o1, o2, o3)`, где *o3* необязателен. Если *o3* нужно игнорировать, передайте [`Py_None`](https://python-all.ru/2.6/c-api/none.html#Py_None) вместо него (передача *NULL* для *o3* привела бы к недопустимому доступу к памяти).

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Negative`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

*Возвращаемое значение: новая ссылка.*

Возвращает отрицание *o* в случае успеха или *NULL* в случае ошибки. Это эквивалент выражения Python `-o`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Positive`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

*Возвращаемое значение: новая ссылка.*

Возвращает *o* в случае успеха или *NULL* в случае ошибки. Это эквивалент выражения Python `+o`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Absolute`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

*Возвращаемое значение: новая ссылка.*

Возвращает абсолютное значение *o* или *NULL* в случае ошибки. Это эквивалент выражения Python `abs(o)`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Invert`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

*Возвращаемое значение: новая ссылка.*

Возвращает побитовое отрицание *o* в случае успеха или *NULL* в случае ошибки. Это эквивалент выражения Python `~o`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Lshift`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат сдвига *o1* влево на *o2* в случае успеха или *NULL* в случае ошибки. Это эквивалент выражения Python `o1 << o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Rshift`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат сдвига *o1* вправо на *o2* в случае успеха или *NULL* в случае ошибки. Это эквивалент выражения Python `o1 >> o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_And`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает побитовое И (and) *o1* и *o2* в случае успеха или *NULL* в случае ошибки. Это эквивалент выражения Python `o1 & o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Xor`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает побитовое исключающее ИЛИ (xor) *o1* и *o2* в случае успеха или *NULL* в случае ошибки. Это эквивалент выражения Python `o1 ^ o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Or`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает «побитовое ИЛИ» *o1* и *o2* в случае успеха или *NULL* при ошибке. Это эквивалент выражения Python `o1 | o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceAdd`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат сложения *o1* и *o2* или *NULL* при ошибке. Операция выполняется *на месте (in-place)*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 += o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceSubtract`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат вычитания *o2* из *o1* или *NULL* при ошибке. Операция выполняется *на месте (in-place)*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 -= o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceMultiply`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат умножения *o1* и *o2* или *NULL* при ошибке. Операция выполняется *на месте (in-place)*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 *= o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceDivide`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат деления *o1* на *o2* или *NULL* в случае ошибки. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 /= o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceFloorDivide`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат целочисленного деления с округлением вниз (floor) *o1* на *o2* или *NULL* при ошибке. Операция выполняется *на месте (in-place)*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 //= o2`.

Новое в версии 2.2.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceTrueDivide`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает разумное приближение математического значения от деления *o1* на *o2* или *NULL* в случае ошибки. Возвращаемое значение является «приблизительным», потому что числа с плавающей запятой в двоичном представлении приблизительны; невозможно представить все действительные числа в двоичной системе. Эта функция может вернуть значение с плавающей запятой, если ей переданы два целых числа. Операция выполняется *на месте*, если *o1* это поддерживает.

Новое в версии 2.2.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceRemainder`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает остаток от деления *o1* на *o2* или *NULL* при ошибке. Операция выполняется *на месте (in-place)*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 %= o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlacePower`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o3*)**

*Возвращаемое значение: новая ссылка.*

См. встроенную функцию [`pow()`](https://python-all.ru/2.6/library/functions.html#pow). Возвращает *NULL* при ошибке. Операция выполняется *на месте (in-place)*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 **= o2`, когда o3 равен [`Py_None`](https://python-all.ru/2.6/c-api/none.html#Py_None), или вариант на месте (in-place) для `pow(o1, o2, o3)` в противном случае. Если *o3* нужно игнорировать, передайте [`Py_None`](https://python-all.ru/2.6/c-api/none.html#Py_None) вместо него (передача *NULL* для *o3* приведет к недопустимому доступу к памяти).

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceLshift`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат сдвига *o1* влево на *o2* в случае успеха или *NULL* при ошибке. Операция выполняется *на месте (in-place)*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 <<= o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceRshift`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат сдвига *o1* вправо на *o2* в случае успеха или *NULL* при ошибке. Операция выполняется *на месте (in-place)*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 >>= o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceAnd`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат побитового И (bitwise and) *o1* и *o2* в случае успеха или *NULL* при ошибке. Операция выполняется *на месте (in-place)*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 &= o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceXor`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает результат побитового исключающего ИЛИ (bitwise exclusive or) *o1* и *o2* в случае успеха или *NULL* при ошибке. Операция выполняется *на месте (in-place)*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 ^= o2`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_InPlaceOr`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

*Возвращаемое значение: новая ссылка.*

Возвращает «побитовое ИЛИ» *o1* и *o2* в случае успеха или *NULL* при ошибке. Операция выполняется *на месте (in-place)*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 |= o2`.

**int `PyNumber_Coerce`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*\*p1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*\*p2*)**

Эта функция принимает адреса двух переменных типа [`PyObject*`](https://python-all.ru/2.6/c-api/structures.html#PyObject). Если объекты, на которые указывают `*p1` и `*p2`, имеют один и тот же тип, увеличивает их счетчик ссылок и возвращает `0` (успех). Если объекты могут быть преобразованы к общему числовому типу, заменяет `*p1` и `*p2` на их преобразованные значения (с «новыми» счетчиками ссылок) и возвращает `0`. Если преобразование невозможно или произошла какая-либо другая ошибка, возвращает `-1` (неудача) и не увеличивает счетчики ссылок. Вызов `PyNumber_Coerce(&o1, &o2)` эквивалентен оператору Python `o1, o2 = coerce(o1, o2)`.

**int `PyNumber_CoerceEx`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*\*p1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*\*p2*)**

Эта функция похожа на

[`PyNumber_Coerce()`](https://python-all.ru/2.6/c-api/number.html#PyNumber_Coerce)

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

`1`

, когда преобразование невозможно и при этом не возникает ошибки. Счетчики ссылок в этом случае по-прежнему не увеличиваются.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Int`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

*Возвращаемое значение: новая ссылка.*

Возвращает *o*, преобразованный в целочисленный объект, в случае успеха, или *NULL* при неудаче. Если аргумент выходит за пределы диапазона целых чисел, вместо него будет возвращен объект long. Это эквивалент выражения Python `int(o)`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Long`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

*Возвращаемое значение: новая ссылка.*

Возвращает *o*, преобразованный в объект длинного целого, в случае успеха, или *NULL* при неудаче. Это эквивалент выражения Python `long(o)`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Float`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

*Возвращаемое значение: новая ссылка.*

Возвращает *o*, преобразованный в число с плавающей точкой (объект float) в случае успеха, или *NULL* при ошибке. Это эквивалент выражения Python `float(o)`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_Index`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

Возвращает *o*, преобразованный в Python int или long, в случае успеха, или *NULL* с возбужденным исключением [`TypeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.TypeError) при неудаче.

Новое в версии 2.5.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyNumber_ToBase`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*n*, int *base*)**

Возвращает целое число *n*, преобразованное в строку в системе счисления *base* с префиксом `'0b'`, `'0o'` или `'0x'`, если применимо. Если *base* не равно 2, 8, 10 или 16, используется формат `'x#num'`, где x – это основание. Если *n* не является объектом int, он сначала преобразуется с помощью [`PyNumber_Index()`](https://python-all.ru/2.6/c-api/number.html#PyNumber_Index).

Новое в версии 2.6.

**Py\_ssize\_t `PyNumber_AsSsize_t`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*exc*)**

Возвращает *o*, преобразованный в значение Py\_ssize\_t, если *o* можно интерпретировать как целое число. Если *o* может быть преобразован в Python int или long, но попытка преобразовать в значение Py\_ssize\_t приведет к возбуждению [`OverflowError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.OverflowError), то аргумент *exc* – это тип исключения, которое будет возбуждено (обычно [`IndexError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.IndexError) или [`OverflowError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.OverflowError)). Если *exc* равен *NULL*, то исключение очищается, а значение усекается до *PY\_SSIZE\_T\_MIN* для отрицательного целого или *PY\_SSIZE\_T\_MAX* для положительного целого.

Новое в версии 2.5.

**int `PyIndex_Check`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

Возвращает True, если *o* является индексным целым числом (т.е. имеет заполненный слот nb\_index в структуре tp\_as\_number).

Новое в версии 2.5.
