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