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