Содержание страницы
Целочисленные объекты¶Integer Objects
Все целые числа реализованы как «длинные» целочисленные объекты произвольного размера.
При ошибке большинство API PyLong_As* возвращают (return type)-1, который невозможно отличить от числа. Используйте PyErr_Occurred() для устранения неоднозначности.
-
type PyLongObject¶
- Часть Stable ABI (как непрозрачная структура).
Этот подтип
PyObjectпредставляет целочисленный объект Python.
-
PyTypeObject PyLong_Type¶
- Часть Stable ABI.
Этот экземпляр
PyTypeObjectпредставляет целочисленный тип Python. Это тот же объект, что иintна уровне Python.
-
int PyLong_Check(PyObject *p)¶
Возвращает истину, если аргумент является
PyLongObjectили подтипомPyLongObject. Эта функция всегда завершается успешно.
-
int PyLong_CheckExact(PyObject *p)¶
Возвращает истину, если аргумент является
PyLongObject, но не подтипомPyLongObject. Эта функция всегда завершается успешно.
-
PyObject *PyLong_FromLong(long v)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает новый объект
PyLongObjectиз v илиNULLпри ошибке.Деталь реализации CPython: CPython хранит массив целочисленных объектов для всех целых чисел в диапазоне от
-5до1024. При создании int в этом диапазоне фактически возвращается ссылка на существующий объект.
-
PyObject *PyLong_FromUnsignedLong(unsigned long v)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает новый объект
PyLongObjectиз C unsigned long илиNULLпри ошибке.
-
PyObject *PyLong_FromSsize_t(Py_ssize_t v)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает новый объект
PyLongObjectиз CPy_ssize_tилиNULLпри ошибке.
-
PyObject *PyLong_FromSize_t(size_t v)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает новый объект
PyLongObjectиз Csize_tилиNULLпри ошибке.
-
PyObject *PyLong_FromLongLong(long long v)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает новый объект
PyLongObjectиз C long long илиNULLпри ошибке.
-
PyObject *PyLong_FromUnsignedLongLong(unsigned long long v)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает новый объект
PyLongObjectиз C unsigned long long илиNULLпри ошибке.
-
PyObject *PyLong_FromInt32(int32_t value)¶
-
PyObject *PyLong_FromInt64(int64_t value)¶
- Часть Stable ABI начиная с версии 3.14.
Возвращает новый объект
PyLongObjectиз знакового C int32_t или int64_t, илиNULLс установленным исключением при ошибке.Добавлено в версии 3.14.
-
PyObject *PyLong_FromUInt32(uint32_t value)¶
-
PyObject *PyLong_FromUInt64(uint64_t value)¶
- Часть Stable ABI начиная с версии 3.14.
Возвращает новый объект
PyLongObjectиз беззнакового C uint32_t или uint64_t, илиNULLс установленным исключением при ошибке.Добавлено в версии 3.14.
-
PyObject *PyLong_FromDouble(double v)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает новый объект
PyLongObjectиз целой части v илиNULLв случае ошибки.
-
PyObject *PyLong_FromString(const char *str, char **pend, int base)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает новый
PyLongObjectна основе строкового значения str, которое интерпретируется в соответствии с основанием base, илиNULLв случае ошибки. Если pend неNULL, то *pend будет указывать на конец str в случае успеха или на первый символ, который не удалось обработать, в случае ошибки. Если base равно0, то str интерпретируется в соответствии с определением Integer literals; в этом случае ведущие нули в ненулевом десятичном числе вызываютValueError. Если base не равно0, оно должно быть между2и36включительно. Начальные и конечные пробелы, а также одиночные символы подчёркивания после спецификатора основания и между цифрами игнорируются. Если цифр нет или str не завершается нулевым символом после цифр и конечных пробелов, будет вызваноValueError.См. также
Функции
PyLong_AsNativeBytes()иPyLong_FromNativeBytes()можно использовать для преобразованияPyLongObjectв массив байтов и обратно в системе счисления256.
-
PyObject *PyLong_FromUnicodeObject(PyObject *u, int base)¶
- Возвращаемое значение: новая ссылка.
Преобразует последовательность цифр Unicode в строке u в целое число Python.
Добавлено в версии 3.3.
-
PyObject *PyLong_FromVoidPtr(void *p)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт целое число Python из указателя p. Значение указателя можно извлечь из полученного значения с помощью
PyLong_AsVoidPtr().
-
PyObject *PyLong_FromNativeBytes(const void *buffer, size_t n_bytes, int flags)¶
- Часть Stable ABI начиная с версии 3.14.
Создаёт целое число Python из значения, содержащегося в первых n_bytes буфера buffer, интерпретируемого как знаковое число в дополнительном коде.
flags – как для
PyLong_AsNativeBytes(). Передача-1выберет нативный порядок байтов, используемый CPython, и будет считать, что старший бит является знаковым. ПередачаPy_ASNATIVEBYTES_UNSIGNED_BUFFERдаёт тот же результат, что и вызовPyLong_FromUnsignedNativeBytes(). Остальные флаги игнорируются.Добавлено в версии 3.13.
-
PyObject *PyLong_FromUnsignedNativeBytes(const void *buffer, size_t n_bytes, int flags)¶
- Часть Stable ABI начиная с версии 3.14.
Создаёт целое число Python из значения, содержащегося в первых n_bytes буфера buffer, интерпретируемого как беззнаковое число.
flags – как для
PyLong_AsNativeBytes(). Передача-1выберет нативный порядок байтов, используемый CPython, и будет считать, что старший бит не является знаковым. Флаги, не связанные с порядком байтов, игнорируются.Добавлено в версии 3.13.
-
PyLong_FromPid(pid)¶
Макрос для создания целого числа Python из идентификатора процесса.
Может быть определён как псевдоним
PyLong_FromLong()илиPyLong_FromLongLong()в зависимости от размера типа PID в системе.Добавлено в версии 3.2.
-
long PyLong_AsLong(PyObject *obj)¶
- Часть Stable ABI.
Возвращает представление на C long для obj. Если obj не является экземпляром
PyLongObject, сначала вызывается его метод__index__()(если он присутствует) для преобразования вPyLongObject.Вызывает
OverflowError, если значение obj выходит за пределы допустимого диапазона для long.Возвращает
-1в случае ошибки. ИспользуйтеPyErr_Occurred()для устранения неоднозначности.Изменено в версии 3.8: Используйте
__index__(), если доступно.Изменено в версии 3.10: Эта функция больше не использует
__int__().-
long PyLong_AS_LONG(PyObject *obj)¶
Полностью эквивалентна предпочтительной
PyLong_AsLong. В частности, может завершиться ошибкой сOverflowErrorили другим исключением.Soft deprecated since version 3.14.
-
long PyLong_AS_LONG(PyObject *obj)¶
-
int PyLong_AsInt(PyObject *obj)¶
- Часть Stable ABI, начиная с версии 3.13.
Аналогична
PyLong_AsLong(), но сохраняет результат в C int вместо C long.Добавлено в версии 3.13.
-
long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)¶
- Часть Stable ABI.
Возвращает представление на C long для obj. Если obj не является экземпляром
PyLongObject, сначала вызывается его метод__index__()(если он присутствует) для преобразования вPyLongObject.Если значение obj больше
LONG_MAXили меньшеLONG_MIN, установите *overflow в1или-1соответственно и верните-1; в противном случае установите *overflow в0. Если возникает любое другое исключение, установите *overflow в0и верните-1как обычно.Возвращает
-1в случае ошибки. Для устранения неоднозначности используйтеPyErr_Occurred().Изменено в версии 3.8: Используйте
__index__(), если доступно.Изменено в версии 3.10: Эта функция больше не использует
__int__().
-
long long PyLong_AsLongLong(PyObject *obj)¶
- Часть Stable ABI.
Возвращает C-представление long long объекта obj. Если obj не является экземпляром
PyLongObject, сначала вызывается его метод__index__()(если он есть) для преобразования вPyLongObject.Вызывает
OverflowError, если значение obj выходит за пределы допустимого диапазона для long long.Возвращает
-1в случае ошибки. Для устранения неоднозначности используйтеPyErr_Occurred().Изменено в версии 3.8: Используйте
__index__(), если доступно.Изменено в версии 3.10: Эта функция больше не использует
__int__().
-
long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)¶
- Часть Stable ABI.
Возвращает C-представление long long объекта obj. Если obj не является экземпляром
PyLongObject, сначала вызывается его метод__index__()(если он есть) для преобразования вPyLongObject.Если значение obj больше
LLONG_MAXили меньшеLLONG_MIN, устанавливает *overflow в1или-1соответственно и возвращает-1; в противном случае устанавливает *overflow в0. Если возникает любое другое исключение, устанавливает *overflow в0и возвращает-1как обычно.Возвращает
-1в случае ошибки. Для устранения неоднозначности используйтеPyErr_Occurred().Добавлено в версии 3.2.
Изменено в версии 3.8: Используйте
__index__(), если доступно.Изменено в версии 3.10: Эта функция больше не использует
__int__().
-
Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)¶
- Часть Stable ABI.
Возвращает C-представление
Py_ssize_tобъекта pylong. pylong должен быть экземпляромPyLongObject.Вызывает
OverflowError, если значение pylong выходит за пределы диапазона дляPy_ssize_t.Возвращает
-1в случае ошибки. Для устранения неоднозначности используйтеPyErr_Occurred().
-
unsigned long PyLong_AsUnsignedLong(PyObject *pylong)¶
- Часть Stable ABI.
Возвращает C-представление unsigned long объекта pylong. pylong должен быть экземпляром
PyLongObject.Вызывает
OverflowError, если значение pylong выходит за пределы диапазона для unsigned long.Возвращает
(unsigned long)-1в случае ошибки. Для устранения неоднозначности используйтеPyErr_Occurred().
-
size_t PyLong_AsSize_t(PyObject *pylong)¶
- Часть Stable ABI.
Возвращает C-представление
size_tобъекта pylong. pylong должен быть экземпляромPyLongObject.Вызывает
OverflowError, если значение pylong выходит за пределы диапазона дляsize_t.Возвращает
(size_t)-1в случае ошибки. Для устранения неоднозначности используйтеPyErr_Occurred().
-
unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)¶
- Часть Stable ABI.
Возвращает 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)¶
- Часть Stable ABI.
Возвращает C-представление unsigned long объекта obj. Если obj не является экземпляром
PyLongObject, сначала вызывается его метод__index__()(если он есть) для преобразования вPyLongObject.Если значение obj выходит за пределы диапазона для unsigned long, возвращается приведение этого значения по модулю
ULONG_MAX + 1.При ошибке возвращает
(unsigned long)-1. ИспользуйтеPyErr_Occurred()для разрешения неоднозначности.Изменено в версии 3.8: Используйте
__index__(), если доступно.Изменено в версии 3.10: Эта функция больше не использует
__int__().
-
unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)¶
- Часть Stable ABI.
Возвращает представление unsigned long long на языке C для obj. Если obj не является экземпляром
PyLongObject, сначала вызывается его метод__index__()(если он есть) для преобразования вPyLongObject.Если значение obj выходит за пределы диапазона для unsigned long long, возвращается приведение этого значения по модулю
ULLONG_MAX + 1.При ошибке возвращает
(unsigned long long)-1. ИспользуйтеPyErr_Occurred()для разрешения неоднозначности.Изменено в версии 3.8: Используйте
__index__(), если доступно.Изменено в версии 3.10: Эта функция больше не использует
__int__().
-
int PyLong_AsInt32(PyObject *obj, int32_t *value)¶
-
int PyLong_AsInt64(PyObject *obj, int64_t *value)¶
- Часть Stable ABI начиная с версии 3.14.
Присваивает *value знаковое представление int32_t или int64_t на языке C для obj.
Если obj не является экземпляром
PyLongObject, сначала вызывается его метод__index__()(если он есть) для преобразования вPyLongObject.Если значение obj выходит за пределы диапазона, возбуждается исключение
OverflowError.Присваивает значение *value и возвращает
0при успехе. Возбуждает исключение и возвращает-1при ошибке.value не должен быть
NULL.Добавлено в версии 3.14.
-
int PyLong_AsUInt32(PyObject *obj, uint32_t *value)¶
-
int PyLong_AsUInt64(PyObject *obj, uint64_t *value)¶
- Часть Stable ABI начиная с версии 3.14.
Присваивает *value беззнаковое представление uint32_t или uint64_t на языке C для obj.
Если obj не является экземпляром
PyLongObject, сначала вызывается его метод__index__()(если он есть) для преобразования вPyLongObject.Если obj отрицательное, возбуждается исключение
ValueError.Если значение obj выходит за пределы диапазона, возбуждается исключение
OverflowError.
Присваивает значение *value и возвращает
0при успехе. Возбуждает исключение и возвращает-1при ошибке.value не должен быть
NULL.Добавлено в версии 3.14.
-
double PyLong_AsDouble(PyObject *pylong)¶
- Часть Stable ABI.
Возвращает представление double на языке C для pylong. pylong должен быть экземпляром
PyLongObject.Возбуждает исключение
OverflowError, если значение pylong выходит за пределы диапазона для double.При ошибке возвращает
-1.0. ИспользуйтеPyErr_Occurred()для разрешения неоднозначности.
-
void *PyLong_AsVoidPtr(PyObject *pylong)¶
- Часть Stable ABI.
Преобразует целое число Python pylong в указатель void на языке C. Если pylong не удаётся преобразовать, возбуждается исключение
OverflowError. Это гарантирует, что полученный указатель void будет пригоден для использования только для значений, созданных с помощьюPyLong_FromVoidPtr().При ошибке возвращает
NULL. ИспользуйтеPyErr_Occurred()для разрешения неоднозначности.
-
Py_ssize_t PyLong_AsNativeBytes(PyObject *pylong, void *buffer, Py_ssize_t n_bytes, int flags)¶
- Часть Stable ABI начиная с версии 3.14.
Копирует значение целого числа Python pylong в нативный buffer размера n_bytes. Флаг flags можно установить в
-1для поведения, аналогичного приведению в C, или в значения, описанные ниже, для управления поведением.Возвращает
-1с возбуждением исключения при ошибке. Это может произойти, если pylong не удаётся интерпретировать как целое число, или если pylong было отрицательным и был установлен флагPy_ASNATIVEBYTES_REJECT_NEGATIVE.В противном случае возвращает количество байт, необходимое для хранения значения. Если оно меньше или равно n_bytes, значение было скопировано целиком. Заполняются все n_bytes буфера: оставшиеся байты заполняются копиями знакового бита.
Если возвращённое значение больше n_bytes, значение было усечено: записывается столько младших битов значения, сколько помещается, а старшие биты игнорируются. Это соответствует типичному поведению нисходящего приведения в стиле C.
Примечание
Переполнение не считается ошибкой. Если возвращённое значение больше n_bytes, старшие биты были отброшены.
0никогда не будет возвращён.Значения всегда копируются в дополнительном коде.
Пример использования:
int32_t value; Py_ssize_t bytes = PyLong_AsNativeBytes(pylong, &value, sizeof(value), -1); if (bytes < 0) { // Не удалось. Установлено исключение Python с указанием причины. return NULL; } else if (bytes <= (Py_ssize_t)sizeof(value)) { // Успешно! } else { // Произошло переполнение, но 'value' содержит усечённые // младшие биты pylong. }
Передача нуля в n_bytes возвращает размер буфера, которого будет достаточно для хранения значения. Он может быть больше, чем технически необходимо, но не чрезмерно. Если n_bytes=0, buffer может быть
NULL.Примечание
Передача n_bytes=0 в эту функцию не является надёжным способом определения битовой длины значения.
Чтобы получить всё значение Python неизвестного размера, функцию можно вызвать дважды: сначала для определения размера буфера, затем для его заполнения:
// Запрос необходимого объёма памяти. Py_ssize_t expected = PyLong_AsNativeBytes(pylong, NULL, 0, -1); if (expected < 0) { // Не удалось. Установлено исключение Python с указанием причины. return NULL; } assert(expected != 0); // Невозможно согласно определению API. uint8_t *bignum = malloc(expected); if (!bignum) { PyErr_SetString(PyExc_MemoryError, "bignum malloc failed."); return NULL; } // Безопасно получить всё значение. Py_ssize_t bytes = PyLong_AsNativeBytes(pylong, bignum, expected, -1); if (bytes < 0) { // Установлено исключение. free(bignum); return NULL; } else if (bytes > expected) { // Этого не должно быть возможно. PyErr_SetString(PyExc_RuntimeError, "Unexpected bignum truncation after a size check."); free(bignum); return NULL; } // Ожидаемый успех с учётом предварительной проверки выше. // ... использовать bignum ... free(bignum);
flags может быть либо
-1(Py_ASNATIVEBYTES_DEFAULTS) для выбора значений по умолчанию, поведение которых наиболее похоже на приведение C, либо комбинацией других флагов из таблицы ниже. Обратите внимание, что-1нельзя комбинировать с другими флагами.В настоящее время
-1соответствуетPy_ASNATIVEBYTES_NATIVE_ENDIAN | Py_ASNATIVEBYTES_UNSIGNED_BUFFER.Флаг
Значение
-
Py_ASNATIVEBYTES_DEFAULTS¶
- Часть Stable ABI начиная с версии 3.14.
-1-
Py_ASNATIVEBYTES_BIG_ENDIAN¶
- Часть Stable ABI начиная с версии 3.14.
0-
Py_ASNATIVEBYTES_LITTLE_ENDIAN¶
- Часть Stable ABI начиная с версии 3.14.
1-
Py_ASNATIVEBYTES_NATIVE_ENDIAN¶
- Часть Stable ABI начиная с версии 3.14.
3-
Py_ASNATIVEBYTES_UNSIGNED_BUFFER¶
- Часть Stable ABI начиная с версии 3.14.
4-
Py_ASNATIVEBYTES_REJECT_NEGATIVE¶
- Часть Stable ABI начиная с версии 3.14.
8-
Py_ASNATIVEBYTES_ALLOW_INDEX¶
- Часть Stable ABI начиная с версии 3.14.
16Указание
Py_ASNATIVEBYTES_NATIVE_ENDIANпереопределяет любые другие флаги порядка байтов. Передача2зарезервирована.По умолчанию будет запрошен буфер достаточного размера для включения знакового бита. Например, при преобразовании 128 с n_bytes=1 функция вернёт 2 (или больше), чтобы сохранить нулевой знаковый бит.
Если указан
Py_ASNATIVEBYTES_UNSIGNED_BUFFER, нулевой знаковый бит будет опущен при расчёте размера. Это позволяет, например, 128 поместиться в однобайтовый буфер. Если впоследствии целевой буфер будет трактоваться как знаковый, положительное входное значение может стать отрицательным. Обратите внимание, что флаг не влияет на обработку отрицательных значений: для них всегда запрашивается место под знаковый бит.Указание
Py_ASNATIVEBYTES_REJECT_NEGATIVEприводит к установке исключения, если pylong отрицательно. Без этого флага отрицательные значения будут копироваться при условии, что достаточно места хотя бы для одного знакового бита, независимо от того, было ли указаноPy_ASNATIVEBYTES_UNSIGNED_BUFFER.Если указан
Py_ASNATIVEBYTES_ALLOW_INDEXи передано нецелое значение, сначала будет вызван его метод__index__(). Это может привести к выполнению кода Python и возможности выполнения других потоков, что может вызвать изменения других объектов или используемых значений. Когда flags равно-1, эта опция не установлена, и нецелые значения вызовутTypeError.Примечание
С флагами по умолчанию flags (
-1, или UNSIGNED_BUFFER без REJECT_NEGATIVE) несколько целых чисел Python могут отображаться на одно значение без переполнения. Например, и255, и-1помещаются в однобайтовый буфер и устанавливают все его биты. Это соответствует типичному поведению приведения в C.Добавлено в версии 3.13.
-
Py_ASNATIVEBYTES_DEFAULTS¶
-
PyLong_AsPid(pid)¶
Макрос для преобразования целого числа Python в идентификатор процесса.
Он может быть определён как псевдоним для
PyLong_AsLong(),PyLong_FromLongLong()илиPyLong_AsInt()в зависимости от размера типа PID в системе.Добавлено в версии 3.2.
-
int PyLong_GetSign(PyObject *obj, int *sign)¶
Получить знак целочисленного объекта obj.
В случае успеха присвоить *sign знак целого числа (0, -1 или +1 для нуля, отрицательного или положительного числа соответственно) и вернуть 0.
В случае ошибки вернуть -1 с установленным исключением. Эта функция всегда завершается успешно, если obj является
PyLongObjectили его подтипом.Добавлено в версии 3.14.
-
int PyLong_IsPositive(PyObject *obj)¶
Проверить, является ли целочисленный объект obj положительным (
obj > 0).Если obj является экземпляром
PyLongObjectили его подтипа, вернуть1, если он положительный, и0в противном случае. Иначе установить исключение и вернуть-1.Добавлено в версии 3.14.
-
int PyLong_IsNegative(PyObject *obj)¶
Проверить, является ли целочисленный объект obj отрицательным (
obj < 0).Если obj является экземпляром
PyLongObjectили его подтипа, вернуть1, если он отрицательный, и0в противном случае. Иначе установить исключение и вернуть-1.Добавлено в версии 3.14.
-
int PyLong_IsZero(PyObject *obj)¶
Проверить, является ли целочисленный объект obj нулём.
Если obj является экземпляром
PyLongObjectили его подтипа, вернуть1, если он равен нулю, и0в противном случае. Иначе установить исключение и вернуть-1.Добавлено в версии 3.14.
-
PyObject *PyLong_GetInfo(void)¶
- Часть Stable ABI.
В случае успеха возвращает доступный только для чтения именованный кортеж, содержащий информацию о внутреннем представлении целых чисел в Python. Описание отдельных полей см. в
sys.int_info.При ошибке возвращает
NULLс установленным исключением.Добавлено в версии 3.1.
-
int PyUnstable_Long_IsCompact(const PyLongObject *op)¶
- Это нестабильное API. Оно может меняться без предупреждения в минорных версиях.
Возвращает 1, если op компактный, и 0 в противном случае.
Эта функция позволяет критичному к производительности коду реализовать «быстрый путь» для малых целых чисел. Для компактных значений используйте
PyUnstable_Long_CompactValue(); для остальных используйтеPyLong_As*илиPyLong_AsNativeBytes().Ожидается, что ускорение будет незначительным для большинства пользователей.
Какие именно значения считаются компактными, является деталью реализации и может измениться.
Добавлено в версии 3.12.
-
Py_ssize_t PyUnstable_Long_CompactValue(const PyLongObject *op)¶
- Это нестабильное API. Оно может меняться без предупреждения в минорных версиях.
Если op компактный, как определено с помощью
PyUnstable_Long_IsCompact(), вернуть его значение.В противном случае возвращаемое значение не определено.
Добавлено в версии 3.12.
Экспорт API¶Export API
Добавлено в версии 3.14.
-
type PyLongLayout¶
- Часть Stable ABI (включая все члены), начиная с версии 3.15.
Макет массива «цифр» («лимпов» в терминологии GMP), используемый для представления абсолютного значения целых чисел произвольной точности.
Используйте
PyLong_GetNativeLayout(), чтобы получить собственный макет объектовintPython, которые внутри используются для целых чисел с «достаточно большим» абсолютным значением.См. также
sys.int_info, который предоставляет аналогичную информацию в Python.-
uint8_t bits_per_digit¶
Количество битов на цифру. Например, 15-битная цифра означает, что биты 0-14 содержат значимую информацию.
-
uint8_t digit_size¶
Размер цифры в байтах. Например, для 15-битной цифры потребуется не менее 2 байт.
-
int8_t digits_order¶
Порядок цифр:
1– сначала старшая цифра-1– сначала младшая цифра
-
int8_t digit_endianness¶
Порядок байтов в цифре:
1– сначала старший байт (big endian)-1– сначала младший байт (little endian)
-
uint8_t bits_per_digit¶
-
const PyLongLayout *PyLong_GetNativeLayout(void)¶
- Часть Stable ABI начиная с версии 3.15.
Получает собственный макет объектов
intPython.См. структуру
PyLongLayout.Функцию нельзя вызывать до инициализации Python или после финализации Python. Возвращаемый макет действителен до завершения Python. Макет одинаков для всех под-интерпретаторов Python в процессе, поэтому его можно кэшировать.
-
type PyLongExport¶
- Часть Stable ABI (включая все члены) начиная с версии 3.15.
Экспорт объекта
intPython.Есть два случая:
-
int64_t value¶
Собственное целочисленное значение экспортируемого объекта
int. Допустимо только еслиdigitsравноNULL.
-
uint8_t negative¶
1если число отрицательное,0в противном случае. Допустимо только еслиdigitsне равноNULL.
-
Py_ssize_t ndigits¶
Количество цифр в массиве
digits. Допустимо только еслиdigitsне равноNULL.
-
const void *digits¶
Массив беззнаковых разрядов, доступный только для чтения. Может быть
NULL.
-
int64_t value¶
-
int PyLong_Export(PyObject *obj, PyLongExport *export_long)¶
- Часть Stable ABI начиная с версии 3.15.
Экспортирует объект Python
int.export_long должен указывать на структуру
PyLongExport, выделенную вызывающим. Он не должен бытьNULL.При успехе заполняет *export_long и возвращает
0. При ошибке устанавливает исключение и возвращает-1.PyLong_FreeExport()должен вызываться, когда экспорт больше не нужен.Деталь реализации CPython: Эта функция всегда завершается успешно, если obj является объектом Python
intили его подклассом.
-
void PyLong_FreeExport(PyLongExport *export_long)¶
- Часть Stable ABI начиная с версии 3.15.
Освобождает экспорт export_long, созданный
PyLong_Export().Деталь реализации CPython: Вызов
PyLong_FreeExport()необязателен, если export_long->digits равенNULL.
PyLongWriter API¶
API PyLongWriter можно использовать для импорта целого числа.
Добавлено в версии 3.14.
-
type PyLongWriter¶
- Часть Stable ABI (как непрозрачная структура) начиная с версии 3.15.
Экземпляр писателя Python
int.Экземпляр должен быть уничтожен с помощью
PyLongWriter_Finish()илиPyLongWriter_Discard().
-
PyLongWriter *PyLongWriter_Create(int negative, Py_ssize_t ndigits, void **digits)¶
- Часть Stable ABI начиная с версии 3.15.
Создаёт
PyLongWriter.При успехе выделяет *digits и возвращает писатель. При ошибке устанавливает исключение и возвращает
NULL.negative равен
1, если число отрицательное, или0в противном случае.ndigits – количество разрядов в массиве digits. Оно должно быть больше 0.
digits не должен быть NULL.
После успешного вызова этой функции вызывающий должен заполнить массив разрядов digits, а затем вызвать
PyLongWriter_Finish(), чтобы получить объект Pythonint. Расположение digits описано вPyLong_GetNativeLayout().Разряды должны находиться в диапазоне [
0;(1 << bits_per_digit) - 1] (гдеbits_per_digit– количество бит на разряд). Любые неиспользуемые старшие разряды должны быть установлены в0.В качестве альтернативы можно вызвать
PyLongWriter_Discard()для уничтожения экземпляра писателя без создания объектаint.
-
PyObject *PyLongWriter_Finish(PyLongWriter *writer)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.15.
Завершает
PyLongWriter, созданныйPyLongWriter_Create().При успехе возвращает объект Python
int. При ошибке устанавливает исключение и возвращаетNULL.Функция заботится о нормализации разрядов и при необходимости преобразует объект в компактное целое число.
Экземпляр писателя и массив digits становятся недействительными после вызова.
-
void PyLongWriter_Discard(PyLongWriter *writer)¶
- Часть Stable ABI начиная с версии 3.15.
Отменяет объект
PyLongWriter, созданный с помощьюPyLongWriter_Create().Если writer равен
NULL, операция не выполняется.Экземпляр писателя и массив digits становятся недействительными после вызова.
Устаревший API¶Deprecated API
Эти макросы мягко устарели. Они описывают параметры
внутреннего представления экземпляров PyLongObject.
Используйте PyLong_GetNativeLayout() вместе с PyLong_Export()
для чтения целочисленных данных или PyLongWriter для их записи.
В настоящее время они используют одну и ту же разметку, но спроектированы так, чтобы продолжать корректно работать,
даже если внутреннее представление целых чисел в CPython изменится.
-
PyLong_SHIFT¶
Это эквивалентно
bits_per_digitв выводеPyLong_GetNativeLayout().
-
PyLong_BASE¶
В настоящее время это эквивалентно 1 << PyLong_SHIFT.
-
PyLong_MASK¶
В настоящее время это эквивалентно (1 << PyLong_SHIFT) - 1