number.md
1> **Источник:** https://python-all.ru/3.7/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Возвращает `1`, если объект *o* предоставляет числовые протоколы, и false в противном случае. Эта функция всегда завершается успешно.1213#### `PyObject* PyNumber_Add(PyObject *o1, PyObject *o2)`1415*Возвращаемое значение: новая ссылка.*1617Возвращает результат сложения *o1* и *o2*, или `NULL` при ошибке. Это эквивалентно выражению Python `o1 + o2`.1819#### `PyObject* PyNumber_Subtract(PyObject *o1, PyObject *o2)`2021*Возвращаемое значение: новая ссылка.*2223Возвращает результат вычитания *o2* из *o1*, или `NULL` при ошибке. Это эквивалентно выражению Python `o1 - o2`.2425#### `PyObject* PyNumber_Multiply(PyObject *o1, PyObject *o2)`2627*Возвращаемое значение: новая ссылка.*2829Возвращает результат умножения *o1* на *o2*, или `NULL` при ошибке. Это эквивалентно выражению Python `o1 * o2`.3031#### `PyObject* PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2)`3233*Возвращаемое значение: новая ссылка.*3435Возвращает результат матричного умножения *o1* на *o2*, или `NULL` при ошибке. Это эквивалентно выражению Python `o1 @ o2`.3637Новое в версии 3.5.3839#### `PyObject* PyNumber_FloorDivide(PyObject *o1, PyObject *o2)`4041*Возвращаемое значение: новая ссылка.*4243Возвращает целую часть от деления *o1* на *o2* или `NULL` в случае ошибки. Это эквивалентно «классическому» делению целых чисел.4445#### `PyObject* PyNumber_TrueDivide(PyObject *o1, PyObject *o2)`4647*Возвращаемое значение: новая ссылка.*4849Возвращает разумное приближение математического значения от деления *o1* на *o2* или `NULL` в случае ошибки. Возвращаемое значение является приближённым, поскольку числа с плавающей запятой в двоичном представлении приближённы; невозможно представить все вещественные числа в двоичной системе. Эта функция может вернуть значение с плавающей запятой, если ей переданы два целых числа.5051#### `PyObject* PyNumber_Remainder(PyObject *o1, PyObject *o2)`5253*Возвращаемое значение: новая ссылка.*5455Возвращает остаток от деления *o1* на *o2*, или `NULL` при ошибке. Это эквивалентно выражению Python `o1 % o2`.5657#### `PyObject* PyNumber_Divmod(PyObject *o1, PyObject *o2)`5859*Возвращаемое значение: новая ссылка.*6061Смотрите встроенную функцию [`divmod()`](https://python-all.ru/3.7/library/functions.html#divmod). Возвращает `NULL` при ошибке. Это эквивалентно выражению Python `divmod(o1, o2)`.6263#### `PyObject* PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3)`6465*Возвращаемое значение: новая ссылка.*6667Смотрите встроенную функцию [`pow()`](https://python-all.ru/3.7/library/functions.html#pow). Возвращает `NULL` при ошибке. Это эквивалентно выражению Python `pow(o1, o2, o3)`, где *o3* является необязательным. Если *o3* нужно игнорировать, передайте [`Py_None`](https://python-all.ru/3.7/c-api/none.html#c.Py_None) вместо него (передача `NULL` для *o3* приведёт к недопустимому доступу к памяти).6869#### `PyObject* PyNumber_Negative(PyObject *o)`7071*Возвращаемое значение: новая ссылка.*7273Возвращает отрицание *o* при успехе или `NULL` при ошибке. Это эквивалентно выражению Python `-o`.7475#### `PyObject* PyNumber_Positive(PyObject *o)`7677*Возвращаемое значение: новая ссылка.*7879Возвращает *o* при успехе или `NULL` при ошибке. Это эквивалентно выражению Python `+o`.8081#### `PyObject* PyNumber_Absolute(PyObject *o)`8283*Возвращаемое значение: новая ссылка.*8485Возвращает абсолютное значение *o* или `NULL` при ошибке. Это эквивалентно выражению Python `abs(o)`.8687#### `PyObject* PyNumber_Invert(PyObject *o)`8889*Возвращаемое значение: новая ссылка.*9091Возвращает побитовое отрицание *o* при успехе или `NULL` при ошибке. Это эквивалентно выражению Python `~o`.9293#### `PyObject* PyNumber_Lshift(PyObject *o1, PyObject *o2)`9495*Возвращаемое значение: новая ссылка.*9697Возвращает результат сдвига влево *o1* на *o2* при успехе, или `NULL` в случае неудачи. Это эквивалент выражения Python `o1 << o2`.9899#### `PyObject* PyNumber_Rshift(PyObject *o1, PyObject *o2)`100101*Возвращаемое значение: новая ссылка.*102103Возвращает результат сдвига вправо *o1* на *o2* при успехе, или `NULL` в случае неудачи. Это эквивалент выражения Python `o1 >> o2`.104105#### `PyObject* PyNumber_And(PyObject *o1, PyObject *o2)`106107*Возвращаемое значение: новая ссылка.*108109Возвращает результат побитового И между *o1* и *o2* при успехе и `NULL` в случае неудачи. Это эквивалент выражения Python `o1 & o2`.110111#### `PyObject* PyNumber_Xor(PyObject *o1, PyObject *o2)`112113*Возвращаемое значение: новая ссылка.*114115Возвращает результат побитового исключающего ИЛИ между *o1* и *o2* при успехе, или `NULL` в случае неудачи. Это эквивалент выражения Python `o1 ^ o2`.116117#### `PyObject* PyNumber_Or(PyObject *o1, PyObject *o2)`118119*Возвращаемое значение: новая ссылка.*120121Возвращает результат побитового ИЛИ между *o1* и *o2* при успехе, или `NULL` в случае неудачи. Это эквивалент выражения Python `o1 | o2`.122123#### `PyObject* PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)`124125*Возвращаемое значение: новая ссылка.*126127Возвращает результат сложения *o1* и *o2*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 += o2`.128129#### `PyObject* PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2)`130131*Возвращаемое значение: новая ссылка.*132133Возвращает результат вычитания *o2* из *o1*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 -= o2`.134135#### `PyObject* PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2)`136137*Возвращаемое значение: новая ссылка.*138139Возвращает результат умножения *o1* и *o2*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 *= o2`.140141#### `PyObject* PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2)`142143*Возвращаемое значение: новая ссылка.*144145Возвращает результат матричного умножения *o1* и *o2*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это eквивалент инструкции Python `o1 @= o2`.146147Новое в версии 3.5.148149#### `PyObject* PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)`150151*Возвращаемое значение: новая ссылка.*152153Возвращает математическое округление вниз от деления *o1* на *o2*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 //= o2`.154155#### `PyObject* PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)`156157*Возвращаемое значение: новая ссылка.*158159Возвращает разумное приближение математического значения от деления *o1* на *o2* или `NULL` в случае ошибки. Возвращаемое значение является приближённым, поскольку числа с плавающей запятой в двоичном представлении приближённы; невозможно представить все вещественные числа в двоичной системе. Эта функция может вернуть значение с плавающей запятой, если ей переданы два целых числа. Операция выполняется *на месте*, если *o1* это поддерживает.160161#### `PyObject* PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)`162163*Возвращаемое значение: новая ссылка.*164165Возвращает остаток от деления *o1* на *o2*, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 %= o2`.166167#### `PyObject* PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)`168169*Возвращаемое значение: новая ссылка.*170171Смотрите встроенную функцию [`pow()`](https://python-all.ru/3.7/library/functions.html#pow). Возвращает `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 **= o2`, когда o3 равно [`Py_None`](https://python-all.ru/3.7/c-api/none.html#c.Py_None), или вариант на месте `pow(o1, o2, o3)` в противном случае. Если *o3* нужно игнорировать, передайте [`Py_None`](https://python-all.ru/3.7/c-api/none.html#c.Py_None) вместо него (передача `NULL` для *o3* вызовет недопустимое обращение к памяти).172173#### `PyObject* PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2)`174175*Возвращаемое значение: новая ссылка.*176177Возвращает результат сдвига влево *o1* на *o2* при успехе, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это eквивалент инструкции Python `o1 <<= o2`.178179#### `PyObject* PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)`180181*Возвращаемое значение: новая ссылка.*182183Возвращает результат сдвига вправо *o1* на *o2* при успехе, или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это eквивалент инструкции Python `o1 >>= o2`.184185#### `PyObject* PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)`186187*Возвращаемое значение: новая ссылка.*188189Возвращает результат побитового И между *o1* и *o2* при успехе и `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент инструкции Python `o1 &= o2`.190191#### `PyObject* PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)`192193*Возвращаемое значение: новая ссылка.*194195Возвращает «побитовое исключающее ИЛИ» *o1* с *o2* в случае успеха или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 ^= o2`.196197#### `PyObject* PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)`198199*Возвращаемое значение: новая ссылка.*200201Возвращает «побитовое ИЛИ» *o1* и *o2* в случае успеха или `NULL` в случае неудачи. Операция выполняется *на месте*, если *o1* это поддерживает. Это эквивалент оператора Python `o1 |= o2`.202203#### `PyObject* PyNumber_Long(PyObject *o)`204205*Возвращаемое значение: новая ссылка.*206207Возвращает *o*, преобразованный в объект целого числа в случае успеха, или `NULL` в случае неудачи. Это эквивалент выражения Python `int(o)`.208209#### `PyObject* PyNumber_Float(PyObject *o)`210211*Возвращаемое значение: новая ссылка.*212213Возвращает *o*, преобразованный в объект числа с плавающей запятой в случае успеха, или `NULL` в случае неудачи. Это эквивалент выражения Python `float(o)`.214215#### `PyObject* PyNumber_Index(PyObject *o)`216217*Возвращаемое значение: новая ссылка.*218219Возвращает *o*, преобразованный в Python int в случае успеха, или `NULL` с возбуждением исключения [`TypeError`](https://python-all.ru/3.7/library/exceptions.html#TypeError) в случае неудачи.220221#### `PyObject* PyNumber_ToBase(PyObject *n, int base)`222223*Возвращаемое значение: новая ссылка.*224225Возвращает целое число *n*, преобразованное в строку по основанию *base*. Аргумент *base* должен быть одним из значений 2, 8, 10 или 16. Для оснований 2, 8 или 16 возвращаемая строка начинается с префикса основания `'0b'`, `'0o'` или `'0x'` соответственно. Если *n* не является Python int, он сначала преобразуется с помощью [`PyNumber_Index()`](https://python-all.ru/3.7/c-api/number.html#c.PyNumber_Index).226227#### `Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)`228229Возвращает *o*, преобразованное в значение Py\_ssize\_t, если *o* можно интерпретировать как целое число. В случае ошибки вызова возбуждается исключение и возвращается `-1`.230231Если *o* можно преобразовать в Python int, но попытка преобразования в значение Py\_ssize\_t привела бы к [`OverflowError`](https://python-all.ru/3.7/library/exceptions.html#OverflowError), то аргумент *exc* – это тип возбуждаемого исключения (обычно [`IndexError`](https://python-all.ru/3.7/library/exceptions.html#IndexError) или [`OverflowError`](https://python-all.ru/3.7/library/exceptions.html#OverflowError)). Если *exc* равен `NULL`, то исключение сбрасывается, а значение обрезается до `PY_SSIZE_T_MIN` для отрицательного целого или до `PY_SSIZE_T_MAX` для положительного.232233#### `int PyIndex_Check(PyObject *o)`234235Возвращает `1`, если *o* является целым индексом (имеет заполненный слот nb\_index в структуре tp\_as\_number), и `0` в противном случае. Эта функция всегда завершается успешно.236