> **Источник:** https://python-all.ru/2.7/c-api/long.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Объекты длинных целых чисел

**`PyLongObject`**

Этот подтип [`PyObject`](https://python-all.ru/2.7/c-api/structures.html#c.PyObject) представляет собой объект длинного целого числа Python.

**[PyTypeObject](https://python-all.ru/2.7/c-api/type.html#c.PyTypeObject) `PyLong_Type`**

Этот экземпляр [`PyTypeObject`](https://python-all.ru/2.7/c-api/type.html#c.PyTypeObject) представляет тип длинного целого числа Python. Это тот же объект, что и `long` и `types.LongType`.

#### `int PyLong_Check(PyObject *p)`

Возвращает истину, если аргумент является [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject) или подтипом [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject).

Изменено в версии 2.2: Теперь допускаются подтипы.

#### `int PyLong_CheckExact(PyObject *p)`

Возвращает истину, если аргумент является [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject), но не подтипом [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject).

Новое в версии 2.2.

#### `PyObject* PyLong_FromLong(long v)`

*Возвращаемое значение: новая ссылка.*

Возвращает новый [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject) объект из *v* или *NULL* при ошибке.

#### `PyObject* PyLong_FromUnsignedLong(unsigned long v)`

*Возвращаемое значение: новая ссылка.*

Возвращает новый [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject) объект из C `unsigned long` или *NULL* при ошибке.

#### `PyObject* PyLong_FromSsize_t(Py_ssize_t v)`

*Возвращаемое значение: новая ссылка.*

Возвращает новый [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject) объект из C `Py_ssize_t` или *NULL* при ошибке.

Новое в версии 2.6.

#### `PyObject* PyLong_FromSize_t(size_t v)`

*Возвращаемое значение: новая ссылка.*

Возвращает новый [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject) объект из C `size_t` или *NULL* при ошибке.

Новое в версии 2.6.

#### `PyObject* PyLong_FromLongLong(PY_LONG_LONG v)`

*Возвращаемое значение: новая ссылка.*

Возвращает новый [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject) объект из C `long long` или *NULL* при ошибке.

#### `PyObject* PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG v)`

*Возвращаемое значение: новая ссылка.*

Возвращает новый [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject) объект из C `unsigned long long`, или *NULL* при ошибке.

#### `PyObject* PyLong_FromDouble(double v)`

*Возвращаемое значение: новая ссылка.*

Возвращает новый [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject) объект из целой части *v* или *NULL* при ошибке.

#### `PyObject* PyLong_FromString(char *str, char **pend, int base)`

*Возвращаемое значение: новая ссылка.*

Возвращает новый [`PyLongObject`](https://python-all.ru/2.7/c-api/long.html#c.PyLongObject) на основе строкового значения в *str*, которое интерпретируется согласно основанию системы счисления в *base*. Если *pend* не равен *NULL*, то *\*pend* будет указывать на первый символ в *str*, следующий за представлением числа. Если *base* равен `0`, основание будет определено по начальным символам *str*: если *str* начинается с `'0x'` или `'0X'`, будет использовано основание 16; если *str* начинается с `'0'`, будет использовано основание 8; в противном случае будет использовано основание 10. Если *base* не равен `0`, он должен быть между `2` и `36` включительно. Начальные пробелы игнорируются. Если цифр нет, возбуждается [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError).

#### `PyObject* PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)`

*Возвращаемое значение: новая ссылка.*

Преобразует последовательность цифр Unicode в длинное целое число Python. Первый параметр, *u*, указывает на первый символ строки Unicode, *length* задаёт количество символов, а *base* – основание системы счисления для преобразования. Основание должно быть в диапазоне \[2, 36\]; если оно выходит за пределы, возбуждается [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError).

Новое в версии 1.6.

Изменено в версии 2.5: Эта функция использовала `int` для *length*. Это может потребовать изменений в коде для корректной поддержки 64-разрядных систем.

#### `PyObject* PyLong_FromVoidPtr(void *p)`

*Возвращаемое значение: новая ссылка.*

Создаёт целое число Python (int или long) из указателя *p*. Значение указателя можно получить из результирующего значения с помощью [`PyLong_AsVoidPtr()`](https://python-all.ru/2.7/c-api/long.html#c.PyLong_AsVoidPtr).

Новое в версии 1.5.2.

Изменено в версии 2.5: Если целое число больше LONG\_MAX, возвращается положительное длинное целое.

#### `long PyLong_AsLong(PyObject *pylong)`

Возвращает представление содержимого *pylong* в виде C `long`. Если *pylong* больше `LONG_MAX`, возбуждается [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError) и возвращается `-1`.

#### `long PyLong_AsLongAndOverflow(PyObject *pylong, int *overflow)`

Возвращает представление содержимого *pylong* в виде C `long`. Если *pylong* больше `LONG_MAX` или меньше `LONG_MIN`, устанавливает *\*overflow* в `1` или `-1` соответственно и возвращает `-1`; в противном случае устанавливает *\*overflow* в `0`. Если возникает любое другое исключение (например, TypeError или MemoryError), то возвращается `-1`, а *\*overflow* будет равно `0`.

Новое в версии 2.7.

#### `PY_LONG_LONG PyLong_AsLongLongAndOverflow(PyObject *pylong, int *overflow)`

Возвращает представление содержимого *pylong* в виде C `long long`. Если *pylong* больше `PY_LLONG_MAX` или меньше `PY_LLONG_MIN`, устанавливает *\*overflow* в `1` или `-1` соответственно и возвращает `-1`; в противном случае устанавливает *\*overflow* в `0`. Если возникает любое другое исключение (например, TypeError или MemoryError), то возвращается `-1`, а *\*overflow* будет равно `0`.

Новое в версии 2.7.

#### `Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)`

Возвращает представление содержимого *pylong* в виде C `Py_ssize_t`. Если *pylong* больше `PY_SSIZE_T_MAX`, возбуждается [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError) и возвращается `-1`.

Новое в версии 2.6.

#### `unsigned long PyLong_AsUnsignedLong(PyObject *pylong)`

Возвращает представление содержимого *pylong* в виде C `unsigned long`. Если *pylong* больше `ULONG_MAX`, возбуждается [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError).

#### `PY_LONG_LONG PyLong_AsLongLong(PyObject *pylong)`

Возвращает C `long long` из длинного целого Python. Если *pylong* не может быть представлено как `long long`, возбуждается [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError) и возвращается `-1`.

Новое в версии 2.2.

#### `unsigned PY_LONG_LONG PyLong_AsUnsignedLongLong(PyObject *pylong)`

Возвращает C `unsigned long long` из длинного целого Python. Если *pylong* не может быть представлено как `unsigned long long`, возбуждается [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError) и возвращается `(unsigned long long)-1`.

Новое в версии 2.2.

Изменено в версии 2.7: Отрицательное значение *pylong* теперь возбуждает [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError), а не [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError).

#### `unsigned long PyLong_AsUnsignedLongMask(PyObject *io)`

Возвращает C `unsigned long` из длинного целого Python без проверки переполнения.

При ошибке возвращает `(unsigned long)-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/2.7/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.

Новое в версии 2.3.

#### `unsigned PY_LONG_LONG PyLong_AsUnsignedLongLongMask(PyObject *io)`

Возвращает C `unsigned long long` из длинного целого Python без проверки переполнения.

Возвращает `(unsigned PY_LONG_LONG)-1` при ошибке. Используйте [`PyErr_Occurred()`](https://python-all.ru/2.7/c-api/exceptions.html#c.PyErr_Occurred) для устранения неоднозначности.

Новое в версии 2.3.

#### `double PyLong_AsDouble(PyObject *pylong)`

Возвращает представление содержимого *pylong* в виде C `double`. Если *pylong* не может быть приблизительно представлено как `double`, возбуждается исключение [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError) и возвращается `-1.0`.

#### `void* PyLong_AsVoidPtr(PyObject *pylong)`

Преобразует целое число Python (int или long) *pylong* в указатель C `void`. Если *pylong* не удаётся преобразовать, возбуждается [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError). Гарантируется, что указатель `void` будет пригоден для использования только для значений, созданных с помощью [`PyLong_FromVoidPtr()`](https://python-all.ru/2.7/c-api/long.html#c.PyLong_FromVoidPtr).

Новое в версии 1.5.2.

Изменено в версии 2.5: Для значений вне диапазона 0..LONG\_MAX принимаются как знаковые, так и беззнаковые целые числа.
