long.md
1> **Источник:** https://python-all.ru/3.9/c-api/long.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Целочисленные объекты89Все целые числа реализованы как «длинные» целочисленные объекты произвольного размера.1011При ошибке большинство API `PyLong_As*` возвращают `(return type)-1`, который невозможно отличить от числа. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred) для устранения неоднозначности.1213**`PyLongObject`**1415Этот подтип [`PyObject`](https://python-all.ru/3.9/c-api/structures.html#c.PyObject) представляет целочисленный объект Python.1617**[PyTypeObject](https://python-all.ru/3.9/c-api/type.html#c.PyTypeObject) `PyLong_Type`**1819Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.9/c-api/type.html#c.PyTypeObject) представляет целочисленный тип Python. Это тот же объект, что и [`int`](https://python-all.ru/3.9/library/functions.html#int) на уровне Python.2021#### `int PyLong_Check(PyObject *p)`2223Возвращает истину, если аргумент является [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject) или подтипом [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject). Эта функция всегда завершается успешно.2425#### `int PyLong_CheckExact(PyObject *p)`2627Возвращает истину, если аргумент является [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject), но не подтипом [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject). Эта функция всегда завершается успешно.2829#### `PyObject* PyLong_FromLong(long v)`3031*Возвращаемое значение: новая ссылка.*3233Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject) из *v* или `NULL` при ошибке.3435Текущая реализация хранит массив целочисленных объектов для всех целых чисел от `-5` до `256`. Когда создаётся целое число из этого диапазона, фактически возвращается ссылка на уже существующий объект.3637#### `PyObject* PyLong_FromUnsignedLong(unsigned long v)`3839*Возвращаемое значение: новая ссылка.*4041Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject) из C `unsigned long` или `NULL` при ошибке.4243#### `PyObject* PyLong_FromSsize_t(Py_ssize_t v)`4445*Возвращаемое значение: новая ссылка.*4647Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject) из C [`Py_ssize_t`](https://python-all.ru/3.9/c-api/intro.html#c.Py_ssize_t) или `NULL` при ошибке.4849#### `PyObject* PyLong_FromSize_t(size_t v)`5051*Возвращаемое значение: новая ссылка.*5253Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject) из C `size_t` или `NULL` при ошибке.5455#### `PyObject* PyLong_FromLongLong(long long v)`5657*Возвращаемое значение: новая ссылка.*5859Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject) из C `long long` или `NULL` при ошибке.6061#### `PyObject* PyLong_FromUnsignedLongLong(unsigned long long v)`6263*Возвращаемое значение: новая ссылка.*6465Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject) из C `unsigned long long`, или `NULL` при ошибке.6667#### `PyObject* PyLong_FromDouble(double v)`6869*Возвращаемое значение: новая ссылка.*7071Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject) из целой части *v* или `NULL` в случае ошибки.7273#### `PyObject* PyLong_FromString(const char *str, char **pend, int base)`7475*Возвращаемое значение: новая ссылка.*7677Возвращает новый [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject) на основе строки *str*, которая интерпретируется в соответствии с основанием системы счисления *base*. Если *pend* не равно `NULL`, *\*pend* будет указывать на первый символ в *str*, следующий за представлением числа. Если *base* равно `0`, то *str* интерпретируется с помощью определения [целочисленных литералов](https://python-all.ru/3.9/reference/lexical_analysis.html#integers); в этом случае ведущие нули в ненулевом десятичном числе вызывают [`ValueError`](https://python-all.ru/3.9/library/exceptions.html#ValueError). Если *base* не равно `0`, оно должно быть в диапазоне от `2` до `36` включительно. Ведущие пробелы и одиночные символы подчёркивания после указателя основания и между цифрами игнорируются. Если цифры отсутствуют, возникает [`ValueError`](https://python-all.ru/3.9/library/exceptions.html#ValueError).7879#### `PyObject* PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)`8081*Возвращаемое значение: новая ссылка.*8283Преобразует последовательность цифр Unicode в целое число Python.8485Устарело с версии 3.3, будет удалено в версии 3.10: Часть старого API [`Py_UNICODE`](https://python-all.ru/3.9/c-api/unicode.html#c.Py_UNICODE); переходите на использование [`PyLong_FromUnicodeObject()`](https://python-all.ru/3.9/c-api/long.html#c.PyLong_FromUnicodeObject).8687#### `PyObject* PyLong_FromUnicodeObject(PyObject *u, int base)`8889*Возвращаемое значение: новая ссылка.*9091Преобразует последовательность цифр Unicode в строке *u* в целое число Python.9293Новое в версии 3.3.9495#### `PyObject* PyLong_FromVoidPtr(void *p)`9697*Возвращаемое значение: новая ссылка.*9899Создаёт целое число Python из указателя *p*. Значение указателя можно извлечь из полученного значения с помощью [`PyLong_AsVoidPtr()`](https://python-all.ru/3.9/c-api/long.html#c.PyLong_AsVoidPtr).100101#### `long PyLong_AsLong(PyObject *obj)`102103Возвращает C-представление `long` объекта *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__) или [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject).104105Возбуждает [`OverflowError`](https://python-all.ru/3.9/library/exceptions.html#OverflowError), если значение *obj* выходит за пределы допустимого диапазона для `long`.106107При ошибке возвращает `-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.108109Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__), если доступно.110111Устарело с версии 3.8: Использование [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) устарело.112113#### `long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)`114115Возвращает C-представление `long` объекта *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__) или [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject).116117Если значение *obj* больше `LONG_MAX` или меньше `LONG_MIN`, установите *\*overflow* в `1` или `-1` соответственно и верните `-1`; в противном случае установите *\*overflow* в `0`. Если возникает любое другое исключение, установите *\*overflow* в `0` и верните `-1` как обычно.118119При ошибке возвращает `-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.120121Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__), если доступно.122123Устарело с версии 3.8: Использование [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) устарело.124125#### `long long PyLong_AsLongLong(PyObject *obj)`126127Возвращает C-представление `long long` объекта *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__) или [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject).128129Возбуждает [`OverflowError`](https://python-all.ru/3.9/library/exceptions.html#OverflowError), если значение *obj* выходит за пределы допустимого диапазона для `long long`.130131При ошибке возвращает `-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.132133Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__), если доступно.134135Устарело с версии 3.8: Использование [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) устарело.136137#### `long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)`138139Возвращает C-представление `long long` объекта *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__) или [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject).140141Если значение *obj* больше `LLONG_MAX` или меньше `LLONG_MIN`, устанавливает *\*overflow* в `1` или `-1` соответственно и возвращает `-1`; в противном случае устанавливает *\*overflow* в `0`. Если возникает любое другое исключение, устанавливает *\*overflow* в `0` и возвращает `-1` как обычно.142143При ошибке возвращает `-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.144145Новое в версии 3.2.146147Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__), если доступно.148149Устарело с версии 3.8: Использование [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) устарело.150151#### `Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)`152153Возвращает C-представление [`Py_ssize_t`](https://python-all.ru/3.9/c-api/intro.html#c.Py_ssize_t) объекта *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject).154155Вызывает [`OverflowError`](https://python-all.ru/3.9/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона для [`Py_ssize_t`](https://python-all.ru/3.9/c-api/intro.html#c.Py_ssize_t).156157При ошибке возвращает `-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.158159#### `unsigned long PyLong_AsUnsignedLong(PyObject *pylong)`160161Возвращает C-представление `unsigned long` для *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject).162163Вызывает [`OverflowError`](https://python-all.ru/3.9/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона для `unsigned long`.164165Возвращает `(unsigned long)-1` в случае ошибки. Для устранения неоднозначности используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred).166167#### `size_t PyLong_AsSize_t(PyObject *pylong)`168169Возвращает C-представление `size_t` объекта *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject).170171Вызывает [`OverflowError`](https://python-all.ru/3.9/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона для `size_t`.172173Возвращает `(size_t)-1` в случае ошибки. Для устранения неоднозначности используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred).174175#### `unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)`176177Возвращает C-представление `unsigned long long` для *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject).178179Возбуждает [`OverflowError`](https://python-all.ru/3.9/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы допустимого диапазона для `unsigned long long`.180181Возвращает `(unsigned long long)-1` в случае ошибки. Для устранения неоднозначности используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred).182183Изменено в версии 3.1: Отрицательное значение *pylong* теперь вызывает [`OverflowError`](https://python-all.ru/3.9/library/exceptions.html#OverflowError), а не [`TypeError`](https://python-all.ru/3.9/library/exceptions.html#TypeError).184185#### `unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)`186187Возвращает C-представление `unsigned long` объекта *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__) или [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) (если он есть) для преобразования его в [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject).188189Если значение *obj* выходит за пределы допустимого диапазона для `unsigned long`, возвращается приведение этого значения по модулю `ULONG_MAX + 1`.190191При ошибке возвращает `(unsigned long)-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.192193Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__), если доступно.194195Устарело с версии 3.8: Использование [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) устарело.196197#### `unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)`198199Возвращает представление `unsigned long long` языка C для *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__) или [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) (если присутствует) для преобразования его в [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject).200201Если значение *obj* выходит за пределы допустимого диапазона для `unsigned long long`, возвращается приведение этого значения по модулю `ULLONG_MAX + 1`.202203При ошибке возвращает `(unsigned long long)-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.204205Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__index__), если доступно.206207Устарело с версии 3.8: Использование [`__int__()`](https://python-all.ru/3.9/reference/datamodel.html#object.__int__) устарело.208209#### `double PyLong_AsDouble(PyObject *pylong)`210211Возвращает C-представление `double` объекта *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.9/c-api/long.html#c.PyLongObject).212213Вызывает [`OverflowError`](https://python-all.ru/3.9/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона для `double`.214215При ошибке возвращает `-1.0`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.216217#### `void* PyLong_AsVoidPtr(PyObject *pylong)`218219Преобразует целое число Python *pylong* в C-указатель `void`. Если *pylong* не удаётся преобразовать, возбуждается [`OverflowError`](https://python-all.ru/3.9/library/exceptions.html#OverflowError). Гарантированно получается пригодный для использования указатель `void` только для значений, созданных с помощью [`PyLong_FromVoidPtr()`](https://python-all.ru/3.9/c-api/long.html#c.PyLong_FromVoidPtr).220221При ошибке возвращает `NULL`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.9/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.222