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

number.md

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

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