Документация Python неофициальный перевод

number.md

228 строк · 17.4 КБ · обычная страница · сырой текст · скачать

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