Целочисленные объекты

Все целые числа реализуются как «длинные» целочисленные объекты произвольного размера.

При ошибке большинство PyLong_As* API возвращает (return type)-1 которые нельзя отличить от числа. Используйте PyErr_Occurred() для устранения неоднозначности.

PyLongObject

Подтип PyObject представляет целочисленный объект Python.

PyTypeObject PyLong_Type

Сущность PyTypeObject представляет целочисленный тип Python. Это тот же объект, что и int в Python слое.

int PyLong_Check(PyObject *p)

Возвращает true, если его аргумент является PyLongObject или подтипом PyLongObject.

int PyLong_CheckExact(PyObject *p)

Возвращает true, если его аргумент является PyLongObject, но не подтипом PyLongObject.

PyObject* PyLong_FromLong(long v)
Return value: New reference.

Возвращает новый объект PyLongObject из v или NULL при сбое.

Текущая реализация сохраняет массив целочисленных объектов для всех целых чисел между -5 и 256, при создании int в этом диапазоне вы фактически просто получаете ссылку на существующий объект. Так что должна быть возможность изменить значение в 1. Подозреваю, что поведение Python в данном случае не определено.: -)

PyObject* PyLong_FromUnsignedLong(unsigned long v)
Return value: New reference.

Возвращает новый объект PyLongObject из unsigned long C или NULL при сбое.

PyObject* PyLong_FromSsize_t(Py_ssize_t v)
Return value: New reference.

Возвращает новый объект PyLongObject из Py_ssize_t C или NULL при сбое.

PyObject* PyLong_FromSize_t(size_t v)
Return value: New reference.

Возвращает новый объект PyLongObject из size_t C или NULL при сбое.

PyObject* PyLong_FromLongLong(long long v)
Return value: New reference.

Возвращает новый объект PyLongObject из long long C или NULL при сбое.

PyObject* PyLong_FromUnsignedLongLong(unsigned long long v)
Return value: New reference.

Возвращает новый объект PyLongObject из unsigned long long C или NULL при сбое.

PyObject* PyLong_FromDouble(double v)
Return value: New reference.

Возвращает новый объект PyLongObject из целочисленной части v или NULL при сбое.

PyObject* PyLong_FromString(const char *str, char **pend, int base)
Return value: New reference.

Возвращает новый PyLongObject на основе строки значения в str, которая интерпретируется по основанию base. Если pend равно не-NULL, *pend указывает на первый символ в str, который следует за представлением числа. Если base равно 0, то str интерпретируется с помощью определения Целочисленные литералы; в этом случае начальные нули в ненулевом десятичном числе вызывают ValueError. Если base не является 0, она должна быть между 2 и 36 включительно. Начальные пробелы и одинарные подчеркивания после базового спецификатора и между цифрами игнорируются. Если цифры отсутствуют, поднимается ValueError.

PyObject* PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Return value: New reference.

Преобразование последовательности цифр Юникода в Python целое числовое значение. Сначала строка Юникода кодированная в байтовую строку с помощью PyUnicode_EncodeDecimal(), а затем преобразуется с помощью PyLong_FromString().

Deprecated since version 3.3, will be removed in version 4.0: Часть старого стиля Py_UNICODE API; выполнить миграцию с использованием PyLong_FromUnicodeObject().

PyObject* PyLong_FromUnicodeObject(PyObject *u, int base)
Return value: New reference.

Преобразовать последовательность цифр Юникод в строке u к целочисленному значению Python. Сначала строка Юникода кодированный в байтовой строке с помощью PyUnicode_EncodeDecimal(), а затем преобразуется с помощью PyLong_FromString().

Добавлено в версии 3.3.

PyObject* PyLong_FromVoidPtr(void *p)
Return value: New reference.

Создать целое число Python из p указателя. Указатель значения может быть извлечен из результирующего значения с помощью PyLong_AsVoidPtr().

long PyLong_AsLong(PyObject *obj)

Возвращает C long представление obj. Если obj не является сущностью PyLongObject, сначала вызывается метод __index__() или __int__() (если присутствует), чтобы преобразовать его в PyLongObject.

Поднимается OverflowError, если значение obj выходит за пределы допустимого диапазона для long.

Возвращает -1 при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.

Изменено в версии 3.8: Используйте __index__(), если доступно.

Не рекомендуется, начиная с версии 3.8: Использование __int__() устарело.

long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)

Возвращает C long представление obj. Если obj не является сущностью PyLongObject, сначала вызывается метод __index__() или __int__() (если присутствует), чтобы преобразовать его в PyLongObject.

Если значение obj больше LONG_MAX или меньше LONG_MIN, установите для *overflow значения 1 или -1 соответственно и возвращает -1; в противном случае устанавливается для *overflow значение 0. Если возникает какое-либо другое исключение, устанавливается для *overflow значение 0 и возвращается -1 как обычно.

Возвращает -1 при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.

Изменено в версии 3.8: Используйте __index__(), если доступно.

Не рекомендуется, начиная с версии 3.8: Использование __int__() устарело.

long long PyLong_AsLongLong(PyObject *obj)

Возвращает C long long представление obj. Если obj не является сущностью PyLongObject, сначала вызывается метод __index__() или __int__() (если присутствует), чтобы преобразовать его в PyLongObject.

Поднимается OverflowError, если значение obj выходит за пределы допустимого диапазона для long long.

Возвращает -1 при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.

Изменено в версии 3.8: Используйте __index__(), если доступно.

Не рекомендуется, начиная с версии 3.8: Использование __int__() устарело.

long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)

Возвращает C long long представление obj. Если obj не является сущностью PyLongObject, сначала вызывается метод __index__() или __int__() (если присутствует), чтобы преобразовать его в PyLongObject.

Если значение obj больше PY_LLONG_MAX или меньше PY_LLONG_MIN, установите для *overflow значение 1 или -1 соответственно и возвращается -1; в противном случае установите для *overflow значение 0. Если возникает какое-либо другое исключение, установите для *overflow значение 0 и возвращается -1 как обычно.

Возвращает -1 при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.

Добавлено в версии 3.2.

Изменено в версии 3.8: Используйте __index__(), если доступно.

Не рекомендуется, начиная с версии 3.8: Использование __int__() устарело.

Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)

Возвращает C Py_ssize_t представление pylong. pylong должна быть сущностью PyLongObject.

Поднимается OverflowError, если значение pylong выходит за пределы допустимого диапазона для Py_ssize_t.

Возвращает -1 при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.

unsigned long PyLong_AsUnsignedLong(PyObject *pylong)

Возвращает C unsigned long представление pylong. pylong должен быть сущностью PyLongObject.

Поднимается OverflowError, если значение pylong выходит за пределы допустимого диапазона для unsigned long.

Возвращает (unsigned long)-1 при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.

size_t PyLong_AsSize_t(PyObject *pylong)

Возвращает C size_t представление pylong. pylong должен быть сущностью PyLongObject.

Поднимается OverflowError, если значение pylong выходит за пределы допустимого диапазона для size_t.

Возвращает (size_t)-1 при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.

unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)

Возвращает C unsigned long long представление pylong. pylong должен быть сущность PyLongObject.

Поднимается OverflowError, если значение pylong выходит за пределы допустимого диапазона для unsigned long long.

Возвращает (unsigned long long)-1 при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.

Изменено в версии 3.1: Негативный pylong сейчас поднимает OverflowError, а не TypeError.

unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)

Возвращает C unsigned long представление obj. Если obj не является сущностью PyLongObject, сначала вызывается метод __index__() или __int__() (если присутствует), чтобы преобразовать его в PyLongObject.

Если значение obj выходит за пределы диапазона для unsigned long, возвращает уменьшение этого значение по модулю ULONG_MAX + 1.

Возвращает (unsigned long)-1 при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.

Изменено в версии 3.8: Используйте __index__(), если доступно.

Не рекомендуется, начиная с версии 3.8: Использование __int__() устарело.

unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)

Возвращает C unsigned long long представление obj. Если obj не является сущностью PyLongObject, сначала вызывается метод __index__() или __int__() (если присутствует), чтобы преобразовать его в PyLongObject.

Если значение obj выходит за пределы диапазона для unsigned long long, возвращает уменьшенное значение по модулю PY_ULLONG_MAX + 1.

Возвращает (unsigned long long)-1 при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.

Изменено в версии 3.8: Используйте __index__(), если доступно.

Не рекомендуется, начиная с версии 3.8: Использование __int__() устарело.

double PyLong_AsDouble(PyObject *pylong)

Возвращает C double представление pylong. pylong должен быть сущностью PyLongObject.

Поднимается OverflowError, если значение pylong выходит за пределы допустимого диапазона для double.

Возвращает -1.0 при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.

void* PyLong_AsVoidPtr(PyObject *pylong)

Преобразовать целочисленный pylong Python в указатель C void. Если pylong не может быть преобразован, будет поднято OverflowError. Это гарантирует только создание пригодного для использования указателя void для значения, созданных с помощью PyLong_FromVoidPtr().

Возвращает NULL при ошибке. Используйте PyErr_Occurred() для устранения неоднозначности.