number.md
1> **Источник:** https://python-all.ru/3.15/c-api/number.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Протокол чисел89#### `int PyNumber_Check(PyObject *o)`1011*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*1213Возвращает `1`, если объект *o* предоставляет числовые протоколы, и false в противном случае. Эта функция всегда завершается успешно.1415Изменено в версии 3.8: Возвращает `1`, если *o* является индексным целым.1617#### `PyObject *PyNumber_Add(PyObject *o1, PyObject *o2)`1819*Возвращаемое значение: новая ссылка.*2021*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*2223Возвращает результат сложения *o1* и *o2*, или `NULL` при ошибке. Это эквивалентно выражению Python `o1 + o2`.2425#### `PyObject *PyNumber_Subtract(PyObject *o1, PyObject *o2)`2627*Возвращаемое значение: новая ссылка.*2829*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*3031Возвращает результат вычитания *o2* из *o1*, или `NULL` при ошибке. Это эквивалентно выражению Python `o1 - o2`.3233#### `PyObject *PyNumber_Multiply(PyObject *o1, PyObject *o2)`3435*Возвращаемое значение: новая ссылка.*3637*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*3839Возвращает результат умножения *o1* на *o2*, или `NULL` при ошибке. Это эквивалентно выражению Python `o1 * o2`.4041#### `PyObject *PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2)`4243*Возвращаемое значение: новая ссылка.*4445*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable) начиная с версии 3.7.*4647Возвращает результат матричного умножения *o1* на *o2*, или `NULL` при ошибке. Это эквивалентно выражению Python `o1 @ o2`.4849Добавлено в версии 3.5.5051#### `PyObject *PyNumber_FloorDivide(PyObject *o1, PyObject *o2)`5253*Возвращаемое значение: новая ссылка.*5455*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*5657Возвращает результат деления *o1* на *o2* с округлением вниз, или `NULL` при ошибке. Это эквивалентно выражению Python `o1 // o2`.5859#### `PyObject *PyNumber_TrueDivide(PyObject *o1, PyObject *o2)`6061*Возвращаемое значение: новая ссылка.*6263*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*6465Возвращает разумное приближение математического значения *o1*, делённого на *o2*, или `NULL` при ошибке. Возвращаемое значение является «приближённым», поскольку двоичные числа с плавающей запятой являются приближёнными; невозможно представить все вещественные числа в двоичной системе. Эта функция может вернуть значение с плавающей запятой при передаче двух целых чисел. Это эквивалентно выражению Python `o1 / o2`.6667#### `PyObject *PyNumber_Remainder(PyObject *o1, PyObject *o2)`6869*Возвращаемое значение: новая ссылка.*7071*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*7273Возвращает остаток от деления *o1* на *o2*, или `NULL` при ошибке. Это эквивалентно выражению Python `o1 % o2`.7475#### `PyObject *PyNumber_Divmod(PyObject *o1, PyObject *o2)`7677*Возвращаемое значение: новая ссылка.*7879*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*8081Смотрите встроенную функцию [`divmod()`](https://python-all.ru/3.15/library/functions.html#divmod). Возвращает `NULL` при ошибке. Это эквивалентно выражению Python `divmod(o1, o2)`.8283#### `PyObject *PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3)`8485*Возвращаемое значение: новая ссылка.*8687*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*8889Смотрите встроенную функцию [`pow()`](https://python-all.ru/3.15/library/functions.html#pow). Возвращает `NULL` при ошибке. Это эквивалентно выражению Python `pow(o1, o2, o3)`, где *o3* является необязательным. Если *o3* нужно игнорировать, передайте [`Py_None`](https://python-all.ru/3.15/c-api/none.html#c.Py_None) вместо него (передача `NULL` для *o3* приведёт к недопустимому доступу к памяти).9091#### `PyObject *PyNumber_Negative(PyObject *o)`9293*Возвращаемое значение: новая ссылка.*9495*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*9697Возвращает отрицание *o* при успехе или `NULL` при ошибке. Это эквивалентно выражению Python `-o`.9899#### `PyObject *PyNumber_Positive(PyObject *o)`100101*Возвращаемое значение: новая ссылка.*102103*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*104105Возвращает *o* при успехе или `NULL` при ошибке. Это эквивалентно выражению Python `+o`.106107#### `PyObject *PyNumber_Absolute(PyObject *o)`108109*Возвращаемое значение: новая ссылка.*110111*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*112113Возвращает абсолютное значение *o* или `NULL` при ошибке. Это эквивалентно выражению Python `abs(o)`.114115#### `PyObject *PyNumber_Invert(PyObject *o)`116117*Возвращаемое значение: новая ссылка.*118119*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*120121Возвращает побитовое отрицание *o* при успехе или `NULL` при ошибке. Это эквивалентно выражению Python `~o`.122123#### `PyObject *PyNumber_Lshift(PyObject *o1, PyObject *o2)`124125*Возвращаемое значение: новая ссылка.*126127*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*128129Возвращает результат сдвига влево *o1* на *o2* при успехе, или `NULL` в случае неудачи. Это эквивалент выражения Python `o1 << o2`.130131#### `PyObject *PyNumber_Rshift(PyObject *o1, PyObject *o2)`132133*Возвращаемое значение: новая ссылка.*134135*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*136137Возвращает результат сдвига вправо *o1* на *o2* при успехе, или `NULL` в случае неудачи. Это эквивалент выражения Python `o1 >> o2`.138139#### `PyObject *PyNumber_And(PyObject *o1, PyObject *o2)`140141*Возвращаемое значение: новая ссылка.*142143*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*144145Возвращает результат побитового И между *o1* и *o2* при успехе и `NULL` в случае неудачи. Это эквивалент выражения Python `o1 & o2`.146147#### `PyObject *PyNumber_Xor(PyObject *o1, PyObject *o2)`148149*Возвращаемое значение: новая ссылка.*150151*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*152153Возвращает результат побитового исключающего ИЛИ между *o1* и *o2* при успехе, или `NULL` в случае неудачи. Это эквивалент выражения Python `o1 ^ o2`.154155#### `PyObject *PyNumber_Or(PyObject *o1, PyObject *o2)`156157*Возвращаемое значение: новая ссылка.*158159*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*160161Возвращает результат побитового ИЛИ между *o1* и *o2* при успехе, или `NULL` в случае неудачи. Это эквивалент выражения Python `o1 | o2`.162163#### `PyObject *PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)`164165*Возвращаемое значение: новая ссылка.*166167*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*168169Возвращает результат сложения *o1* и *o2*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 += o2`.170171#### `PyObject *PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2)`172173*Возвращаемое значение: новая ссылка.*174175*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*176177Возвращает результат вычитания *o2* из *o1*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 -= o2`.178179#### `PyObject *PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2)`180181*Возвращаемое значение: новая ссылка.*182183*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*184185Возвращает результат умножения *o1* и *o2*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 *= o2`.186187#### `PyObject *PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2)`188189*Возвращаемое значение: новая ссылка.*190191*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable) начиная с версии 3.7.*192193Возвращает результат матричного умножения *o1* и *o2*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это eквивалент инструкции Python `o1 @= o2`.194195Добавлено в версии 3.5.196197#### `PyObject *PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)`198199*Возвращаемое значение: новая ссылка.*200201*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*202203Возвращает математическое округление вниз от деления *o1* на *o2*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 //= o2`.204205#### `PyObject *PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)`206207*Возвращаемое значение: новая ссылка.*208209*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*210211Возвращает разумное приближение математического значения от деления *o1* на *o2*, или `NULL` в случае неудачи. Возвращаемое значение является «приближённым», потому что двоичные числа с плавающей запятой приближённы; невозможно представить все вещественные числа в двоичной системе. Эта функция может вернуть значение с плавающей запятой, если ей переданы два целых числа. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 /= o2`.212213#### `PyObject *PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)`214215*Возвращаемое значение: новая ссылка.*216217*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*218219Возвращает остаток от деления *o1* на *o2*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 %= o2`.220221#### `PyObject *PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)`222223*Возвращаемое значение: новая ссылка.*224225*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*226227Смотрите встроенную функцию [`pow()`](https://python-all.ru/3.15/library/functions.html#pow). Возвращает `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 **= o2`, когда o3 равно [`Py_None`](https://python-all.ru/3.15/c-api/none.html#c.Py_None), или вариант на месте `pow(o1, o2, o3)` в противном случае. Если *o3* нужно игнорировать, передайте `Py_None` вместо него (передача `NULL` для *o3* вызовет недопустимое обращение к памяти).228229#### `PyObject *PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2)`230231*Возвращаемое значение: новая ссылка.*232233*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*234235Возвращает результат сдвига влево *o1* на *o2* при успехе, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это eквивалент инструкции Python `o1 <<= o2`.236237#### `PyObject *PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)`238239*Возвращаемое значение: новая ссылка.*240241*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*242243Возвращает результат сдвига вправо *o1* на *o2* при успехе, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это eквивалент инструкции Python `o1 >>= o2`.244245#### `PyObject *PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)`246247*Возвращаемое значение: новая ссылка.*248249*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*250251Возвращает результат побитового И между *o1* и *o2* при успехе и `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 &= o2`.252253#### `PyObject *PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)`254255*Возвращаемое значение: новая ссылка.*256257*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*258259Возвращает «побитовое исключающее ИЛИ» *o1* с *o2* в случае успеха или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 ^= o2`.260261#### `PyObject *PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)`262263*Возвращаемое значение: новая ссылка.*264265*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*266267Возвращает «побитовое ИЛИ» *o1* и *o2* в случае успеха или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 |= o2`.268269#### `PyObject *PyNumber_Long(PyObject *o)`270271*Возвращаемое значение: новая ссылка.*272273*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*274275Возвращает *o*, преобразованный в объект целого числа в случае успеха, или `NULL` в случае неудачи. Это эквивалент выражения Python `int(o)`.276277#### `PyObject *PyNumber_Float(PyObject *o)`278279*Возвращаемое значение: новая ссылка.*280281*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*282283Возвращает *o*, преобразованный в объект числа с плавающей запятой в случае успеха, или `NULL` в случае неудачи. Это эквивалент выражения Python `float(o)`.284285#### `PyObject *PyNumber_Index(PyObject *o)`286287*Возвращаемое значение: новая ссылка.*288289*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*290291Возвращает *o*, преобразованный в Python int в случае успеха, или `NULL` с возбуждением исключения [`TypeError`](https://python-all.ru/3.15/library/exceptions.html#TypeError) в случае неудачи.292293Изменено в версии 3.10: Результат всегда имеет точный тип [`int`](https://python-all.ru/3.15/library/functions.html#int). Ранее результат мог быть экземпляром подкласса `int`.294295#### `PyObject *PyNumber_ToBase(PyObject *n, int base)`296297*Возвращаемое значение: новая ссылка.*298299*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*300301Возвращает целое число *n*, преобразованное в строку по основанию *base*. Аргумент *base* должен быть одним из значений 2, 8, 10 или 16. Для оснований 2, 8 или 16 возвращаемая строка начинается с префикса основания `'0b'`, `'0o'` или `'0x'` соответственно. Если *n* не является Python int, он сначала преобразуется с помощью [`PyNumber_Index()`](https://python-all.ru/3.15/c-api/number.html#c.PyNumber_Index).302303#### `Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)`304305*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*306307Возвращает *o*, преобразованный в значение [`Py_ssize_t`](https://python-all.ru/3.15/c-api/intro.html#c.Py_ssize_t), если *o* можно интерпретировать как целое число. В случае неудачи возбуждается исключение и возвращается `-1`.308309Если *o* можно преобразовать в Python int, но попытка преобразования в значение [`Py_ssize_t`](https://python-all.ru/3.15/c-api/intro.html#c.Py_ssize_t) вызовет [`OverflowError`](https://python-all.ru/3.15/library/exceptions.html#OverflowError), то аргумент *exc* – это тип возбуждаемого исключения (обычно [`IndexError`](https://python-all.ru/3.15/library/exceptions.html#IndexError) или `OverflowError`). Если *exc* равно `NULL`, то исключение сбрасывается, а значение усекается до `PY_SSIZE_T_MIN` для отрицательного целого или `PY_SSIZE_T_MAX` для положительного.310311#### `int PyIndex_Check(PyObject *o)`312313*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable) с версии 3.8.*314315Возвращает `1`, если *o* является индексным целым (заполнен слот `nb_index` структуры `tp_as_number`), и `0` в противном случае. Эта функция всегда завершается успешно.316