number.md
1> **Источник:** https://python-all.ru/2.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_Divide(PyObject *o1, PyObject *o2)`3233*Возвращаемое значение: новая ссылка.*3435Returns the result of dividing *o1* by *o2*, or *NULL* on failure. This is the equivalent of the Python expression `o1 / o2`.3637#### `PyObject* PyNumber_FloorDivide(PyObject *o1, PyObject *o2)`3839*Возвращаемое значение: новая ссылка.*4041Возвращает целую часть от деления *o1* на *o2* или *NULL* в случае ошибки. Эквивалентно «классическому» делению целых чисел.4243Новое в версии 2.2.4445#### `PyObject* PyNumber_TrueDivide(PyObject *o1, PyObject *o2)`4647*Возвращаемое значение: новая ссылка.*4849Возвращает разумное приближение математического значения от деления *o1* на *o2* или *NULL* в случае ошибки. Возвращаемое значение является «приблизительным», потому что числа с плавающей запятой в двоичном представлении приблизительны; невозможно представить все действительные числа в двоичной системе. Эта функция может вернуть значение с плавающей запятой, если ей переданы два целых числа.5051Новое в версии 2.2.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/2.7/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/2.7/library/functions.html#pow). Возвращает *NULL* в случае ошибки. Эквивалентно выражению Python `pow(o1, o2, o3)`, где *o3* является необязательным. Если *o3* нужно проигнорировать, передайте [`Py_None`](https://python-all.ru/2.7/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_InPlaceDivide(PyObject *o1, PyObject *o2)`144145*Возвращаемое значение: новая ссылка.*146147Returns the result of dividing *o1* by *o2*, or *NULL* on failure. The operation is done *in-place* when *o1* supports it. This is the equivalent of the Python statement `o1 /= o2`.148149#### `PyObject* PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)`150151*Возвращаемое значение: новая ссылка.*152153Возвращает целую часть от деления *o1* на *o2* или *NULL* в случае ошибки. Операция выполняется *на месте*, если *o1* это поддерживает. Эквивалентно инструкции Python `o1 //= o2`.154155Новое в версии 2.2.156157#### `PyObject* PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)`158159*Возвращаемое значение: новая ссылка.*160161Возвращает разумное приближение математического значения от деления *o1* на *o2* или *NULL* в случае ошибки. Возвращаемое значение является «приблизительным», потому что числа с плавающей запятой в двоичном представлении приблизительны; невозможно представить все действительные числа в двоичной системе. Эта функция может вернуть значение с плавающей запятой, если ей переданы два целых числа. Операция выполняется *на месте*, если *o1* это поддерживает.162163Новое в версии 2.2.164165#### `PyObject* PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)`166167*Возвращаемое значение: новая ссылка.*168169Возвращает остаток от деления *o1* на *o2* или *NULL* в случае ошибки. Операция выполняется *на месте*, если *o1* это поддерживает. Эквивалентно инструкции Python `o1 %= o2`.170171#### `PyObject* PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)`172173*Возвращаемое значение: новая ссылка.*174175См. встроенную функцию [`pow()`](https://python-all.ru/2.7/library/functions.html#pow). Возвращает *NULL* в случае ошибки. Операция выполняется *на месте*, если *o1* это поддерживает. Эквивалентно инструкции Python `o1 **= o2`, когда o3 равно [`Py_None`](https://python-all.ru/2.7/c-api/none.html#c.Py_None), или варианту с изменением на месте для `pow(o1, o2, o3)` в противном случае. Если *o3* нужно проигнорировать, передайте [`Py_None`](https://python-all.ru/2.7/c-api/none.html#c.Py_None) вместо него (передача *NULL* для *o3* приведёт к недопустимому доступу к памяти).176177#### `PyObject* PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2)`178179*Возвращаемое значение: новая ссылка.*180181Возвращает результат сдвига *o1* влево на *o2* в случае успеха или *NULL* в случае ошибки. Операция выполняется *на месте*, если *o1* это поддерживает. Эквивалентно инструкции Python `o1 <<= o2`.182183#### `PyObject* PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)`184185*Возвращаемое значение: новая ссылка.*186187Возвращает результат сдвига *o1* вправо на *o2* в случае успеха или *NULL* в случае ошибки. Операция выполняется *на месте*, если *o1* это поддерживает. Эквивалентно инструкции Python `o1 >>= o2`.188189#### `PyObject* PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)`190191*Возвращаемое значение: новая ссылка.*192193Возвращает результат «побитового И» над *o1* и *o2* в случае успеха или *NULL* в случае ошибки. Операция выполняется *на месте*, если *o1* это поддерживает. Эквивалентно инструкции Python `o1 &= o2`.194195#### `PyObject* PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)`196197*Возвращаемое значение: новая ссылка.*198199Возвращает результат «побитового исключающего ИЛИ» над *o1* и *o2* в случае успеха или *NULL* в случае ошибки. Операция выполняется *на месте*, если *o1* это поддерживает. Эквивалентно инструкции Python `o1 ^= o2`.200201#### `PyObject* PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)`202203*Возвращаемое значение: новая ссылка.*204205Возвращает результат «побитового ИЛИ» над *o1* и *o2* в случае успеха или *NULL* в случае ошибки. Операция выполняется *на месте*, если *o1* это поддерживает. Эквивалентно инструкции Python `o1 |= o2`.206207#### `int PyNumber_Coerce(PyObject **p1, PyObject **p2)`208209Эта функция принимает адреса двух переменных типа [`PyObject*`](https://python-all.ru/2.7/c-api/structures.html#c.PyObject). Если объекты, на которые указывают `*p1` и `*p2`, имеют один тип, увеличивает их счётчик ссылок и возвращает `0` (успех). Если объекты можно преобразовать к общему числовому типу, заменяет `*p1` и `*p2` на их преобразованные значения (с «новыми» счётчиками ссылок) и возвращает `0`. Если преобразование невозможно или произошла другая ошибка, возвращает `-1` (неудача) и не увеличивает счётчики ссылок. Вызов `PyNumber_Coerce(&o1, &o2)` эквивалентен оператору Python `o1, o2 = coerce(o1, o2)`.210211#### `int PyNumber_CoerceEx(PyObject **p1, PyObject **p2)`212213Эта функция похожа на [`PyNumber_Coerce()`](https://python-all.ru/2.7/c-api/number.html#c.PyNumber_Coerce), за исключением того, что возвращает `1`, когда преобразование невозможно и не возникает ошибки. Счётчики ссылок в этом случае по-прежнему не увеличиваются.214215#### `PyObject* PyNumber_Int(PyObject *o)`216217*Возвращаемое значение: новая ссылка.*218219Returns the *o* converted to an integer object on success, or *NULL* on failure. If the argument is outside the integer range a long object will be returned instead. This is the equivalent of the Python expression `int(o)`.220221#### `PyObject* PyNumber_Long(PyObject *o)`222223*Возвращаемое значение: новая ссылка.*224225Returns the *o* converted to a long integer object on success, or *NULL* on failure. This is the equivalent of the Python expression `long(o)`.226227#### `PyObject* PyNumber_Float(PyObject *o)`228229*Возвращаемое значение: новая ссылка.*230231Возвращает *o*, преобразованный в объект float в случае успеха, или *NULL* в случае\\nошибки. Это эквивалент выражения Python `float(o)`.232233#### `PyObject* PyNumber_Index(PyObject *o)`234235Returns the *o* converted to a Python int or long on success or *NULL* with a [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError) exception raised on failure.236237Новое в версии 2.5.238239#### `PyObject* PyNumber_ToBase(PyObject *n, int base)`240241Returns the integer *n* converted to *base* as a string with a base marker of `'0b'`, `'0o'`, or `'0x'` if applicable. When *base* is not 2, 8, 10, or 16, the format is `'x#num'` where x is the base. If *n* is not an int object, it is converted with [`PyNumber_Index()`](https://python-all.ru/2.7/c-api/number.html#c.PyNumber_Index) first.242243Новое в версии 2.6.244245#### `Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)`246247Returns *o* converted to a Py\_ssize\_t value if *o* can be interpreted as an integer. If *o* can be converted to a Python int or long but the attempt to convert to a Py\_ssize\_t value would raise an [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError), then the *exc* argument is the type of exception that will be raised (usually [`IndexError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.IndexError) or [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError)). If *exc* is *NULL*, then the exception is cleared and the value is clipped to *PY\_SSIZE\_T\_MIN* for a negative integer or *PY\_SSIZE\_T\_MAX* for a positive integer.248249Новое в версии 2.5.250251#### `int PyIndex_Check(PyObject *o)`252253Возвращает `1`, если *o* является индексным целым (слот nb\_index структуры tp\_as\_number заполнен), и `0` в противном случае.254255Новое в версии 2.5.256