Целочисленные объекты¶
Все целые числа реализуются как «длинные» целочисленные объекты произвольного размера.
При ошибке большинство PyLong_As*
API возвращает (return type)-1
которые нельзя
отличить от числа. Используйте PyErr_Occurred()
для устранения неоднозначности.
-
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.
Преобразование последовательности цифр Unicode в целочисленное значение Python.
Deprecated since version 3.3, will be removed in version 3.10: Часть старого стиля
Py_UNICODE
API; выполнить миграцию с использованиемPyLong_FromUnicodeObject()
.
-
PyObject*
PyLong_FromUnicodeObject
(PyObject *u, int base)¶ - Return value: New reference.
Преобразование последовательности цифр Unicode в строке 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)¶ Преобразовать целочисленный pylong Python в указатель C
void
. Если pylong не может быть преобразован, будет поднятоOverflowError
. Это гарантирует только создание пригодного для использования указателяvoid
для значения, созданных с помощьюPyLong_FromVoidPtr()
.Возвращает
NULL
при ошибке. ИспользуйтеPyErr_Occurred()
для устранения неоднозначности.