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

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

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

PyLongObject

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

PyTypeObject PyLong_Type

Данный экземпляр PyTypeObject представляет собой целочисленный тип Python. Это тот же объект, что и int в слое Python.

int PyLong_Check(PyObject *p)

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

int PyLong_CheckExact(PyObject *p)

Возвращает истину, если его аргумент — 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 из C unsigned long или NULL в случае ошибки.

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

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

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

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

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

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

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

Возвращает новый объект PyLongObject из C unsigned long long или 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.

Устарело с версии 3.3, будет удалено в 3.10 версии.: Часть старого API Py_UNICODE; пожалуйста, перейдите на использование PyLong_FromUnicodeObject().

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

Преобразовать последовательность цифр Юникод в строке u в целочисленное значение Python.

Добавлено в версии 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)

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

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