Целочисленные объекты¶
Все целые числа реализованы как «длинные» целочисленные объекты произвольного размера.
В случае ошибки большинство API-интерфейсов PyLong_As*
возвращают (return
type)-1
, который невозможно отличить от числа. Используйте
PyErr_Occurred()
для устранения неоднозначности.
-
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
из Cunsigned long
илиNULL
в случае ошибки.
-
PyObject*
PyLong_FromSsize_t
(Py_ssize_t v)¶ - Return value: New reference.
Возвращает новый объект
PyLongObject
из CPy_ssize_t
илиNULL
в случае ошибки.
-
PyObject*
PyLong_FromSize_t
(size_t v)¶ - Return value: New reference.
Возвращает новый объект
PyLongObject
из Csize_t
илиNULL
в случае ошибки.
-
PyObject*
PyLong_FromLongLong
(long long v)¶ - Return value: New reference.
Возвращает новый объект
PyLongObject
из Clong long
илиNULL
в случае ошибки.
-
PyObject*
PyLong_FromUnsignedLongLong
(unsigned long long v)¶ - Return value: New reference.
Возвращает новый объект
PyLongObject
из Cunsigned 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()
для устранения неоднозначности.