Документация Python неофициальный перевод

long.md

304 строк · 26.3 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.12/c-api/long.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Целочисленные объекты89Все целые числа реализованы как «длинные» целочисленные объекты произвольного размера.1011При ошибке большинство API `PyLong_As*` возвращают `(return type)-1`, который невозможно отличить от числа. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred) для устранения неоднозначности.1213#### `type PyLongObject`1415*Часть [Limited API](https://python-all.ru/3.12/c-api/stable.html#stable) (как непрозрачная структура).*1617Этот подтип [`PyObject`](https://python-all.ru/3.12/c-api/structures.html#c.PyObject) представляет целочисленный объект Python.1819#### `PyTypeObject PyLong_Type`2021*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*2223Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.12/c-api/type.html#c.PyTypeObject) представляет целочисленный тип Python. Это тот же объект, что и [`int`](https://python-all.ru/3.12/library/functions.html#int) на уровне Python.2425#### `int PyLong_Check(PyObject *p)`2627Возвращает истину, если аргумент является [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject) или подтипом [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject). Эта функция всегда завершается успешно.2829#### `int PyLong_CheckExact(PyObject *p)`3031Возвращает истину, если аргумент является [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject), но не подтипом [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject). Эта функция всегда завершается успешно.3233#### `PyObject *PyLong_FromLong(long v)`3435*Возвращаемое значение: новая ссылка.*3637*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*3839Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject) из *v* или `NULL` при ошибке.4041Текущая реализация хранит массив целочисленных объектов для всех целых чисел от `-5` до `256`. Когда создаётся целое число из этого диапазона, фактически возвращается ссылка на уже существующий объект.4243#### `PyObject *PyLong_FromUnsignedLong(unsigned long v)`4445*Возвращаемое значение: новая ссылка.*4647*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*4849Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject) из C unsigned long или `NULL` при ошибке.5051#### `PyObject *PyLong_FromSsize_t(Py_ssize_t v)`5253*Возвращаемое значение: новая ссылка.*5455*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*5657Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject) из C [`Py_ssize_t`](https://python-all.ru/3.12/c-api/intro.html#c.Py_ssize_t) или `NULL` при ошибке.5859#### `PyObject *PyLong_FromSize_t(size_t v)`6061*Возвращаемое значение: новая ссылка.*6263*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*6465Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject) из C `size_t` или `NULL` при ошибке.6667#### `PyObject *PyLong_FromLongLong(long long v)`6869*Возвращаемое значение: новая ссылка.*7071*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*7273Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject) из C long long или `NULL` при ошибке.7475#### `PyObject *PyLong_FromUnsignedLongLong(unsigned long long v)`7677*Возвращаемое значение: новая ссылка.*7879*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*8081Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject) из C unsigned long long или `NULL` при ошибке.8283#### `PyObject *PyLong_FromDouble(double v)`8485*Возвращаемое значение: новая ссылка.*8687*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*8889Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject) из целой части *v* или `NULL` в случае ошибки.9091#### `PyObject *PyLong_FromString(const char *str, char **pend, int base)`9293*Возвращаемое значение: новая ссылка.*9495*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*9697Возвращает новый [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject) на основе строкового значения *str*, которое интерпретируется в соответствии с основанием *base*, или `NULL` в случае ошибки. Если *pend* не `NULL`, то *\*pend* будет указывать на конец *str* в случае успеха или на первый символ, который не удалось обработать, в случае ошибки. Если *base* равно `0`, то *str* интерпретируется в соответствии с определением [Integer literals](https://python-all.ru/3.12/reference/lexical_analysis.html#integers); в этом случае ведущие нули в ненулевом десятичном числе вызывают [`ValueError`](https://python-all.ru/3.12/library/exceptions.html#ValueError). Если *base* не равно `0`, оно должно быть между `2` и `36` включительно. Начальные и конечные пробелы, а также одиночные символы подчёркивания после спецификатора основания и между цифрами игнорируются. Если цифр нет или *str* не завершается нулевым символом после цифр и конечных пробелов, будет вызвано [`ValueError`](https://python-all.ru/3.12/library/exceptions.html#ValueError).9899> **См. также**100>101> Методы Python [`int.to_bytes()`](https://python-all.ru/3.12/library/stdtypes.html#int.to_bytes) и [`int.from_bytes()`](https://python-all.ru/3.12/library/stdtypes.html#int.from_bytes) для преобразования [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject) в массив байтов по основанию `256` и обратно. Эти методы можно вызывать из C с помощью [`PyObject_CallMethod()`](https://python-all.ru/3.12/c-api/call.html#c.PyObject_CallMethod).102103#### `PyObject *PyLong_FromUnicodeObject(PyObject *u, int base)`104105*Возвращаемое значение: новая ссылка.*106107Преобразует последовательность цифр Unicode в строке *u* в целое число Python.108109Добавлено в версии 3.3.110111#### `PyObject *PyLong_FromVoidPtr(void *p)`112113*Возвращаемое значение: новая ссылка.*114115*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*116117Создаёт целое число Python из указателя *p*. Значение указателя можно извлечь из полученного значения с помощью [`PyLong_AsVoidPtr()`](https://python-all.ru/3.12/c-api/long.html#c.PyLong_AsVoidPtr).118119#### `long PyLong_AsLong(PyObject *obj)`120121*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*122123Возвращает представление на C long для *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__) (если он присутствует) для преобразования в [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject).124125Вызывает [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError), если значение *obj* выходит за пределы допустимого диапазона для long.126127При ошибке возвращает `-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.128129Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__), если доступно.130131Изменено в версии 3.10: Эта функция больше не использует [`__int__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__int__).132133#### `long PyLong_AS_LONG(PyObject *obj)`134135Псевдоним, [мягко устаревший](https://python-all.ru/3.12/glossary.html#term-soft-deprecated). Полностью эквивалентен предпочтительному `PyLong_AsLong`. В частности, может завершиться ошибкой [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError) или другим исключением.136137Устарело с версии 3.14: Функция мягко устарела.138139#### `long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)`140141*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*142143Возвращает представление на C long для *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__) (если он присутствует) для преобразования в [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject).144145Если значение *obj* больше `LONG_MAX` или меньше `LONG_MIN`, установите *\*overflow* в `1` или `-1` соответственно и верните `-1`; в противном случае установите *\*overflow* в `0`. Если возникает любое другое исключение, установите *\*overflow* в `0` и верните `-1` как обычно.146147При ошибке возвращает `-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.148149Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__), если доступно.150151Изменено в версии 3.10: Эта функция больше не использует [`__int__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__int__).152153#### `long long PyLong_AsLongLong(PyObject *obj)`154155*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*156157Возвращает C-представление long long объекта *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject).158159Вызывает [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError), если значение *obj* выходит за пределы допустимого диапазона для long long.160161При ошибке возвращает `-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.162163Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__), если доступно.164165Изменено в версии 3.10: Эта функция больше не использует [`__int__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__int__).166167#### `long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)`168169*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*170171Возвращает C-представление long long объекта *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject).172173Если значение *obj* больше `LLONG_MAX` или меньше `LLONG_MIN`, устанавливает *\*overflow* в `1` или `-1` соответственно и возвращает `-1`; в противном случае устанавливает *\*overflow* в `0`. Если возникает любое другое исключение, устанавливает *\*overflow* в `0` и возвращает `-1` как обычно.174175При ошибке возвращает `-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.176177Добавлено в версии 3.2.178179Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__), если доступно.180181Изменено в версии 3.10: Эта функция больше не использует [`__int__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__int__).182183#### `Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)`184185*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*186187Возвращает C-представление [`Py_ssize_t`](https://python-all.ru/3.12/c-api/intro.html#c.Py_ssize_t) объекта *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject).188189Вызывает [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона для [`Py_ssize_t`](https://python-all.ru/3.12/c-api/intro.html#c.Py_ssize_t).190191При ошибке возвращает `-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.192193#### `unsigned long PyLong_AsUnsignedLong(PyObject *pylong)`194195*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*196197Возвращает C-представление unsigned long объекта *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject).198199Вызывает [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона для unsigned long.200201Возвращает `(unsigned long)-1` в случае ошибки. Для устранения неоднозначности используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred).202203#### `size_t PyLong_AsSize_t(PyObject *pylong)`204205*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*206207Возвращает C-представление `size_t` объекта *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject).208209Вызывает [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона для `size_t`.210211Возвращает `(size_t)-1` в случае ошибки. Для устранения неоднозначности используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred).212213#### `unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)`214215*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*216217Возвращает C-представление unsigned long long объекта *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject).218219Вызывает [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона для unsigned long long.220221Возвращает `(unsigned long long)-1` в случае ошибки. Для устранения неоднозначности используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred).222223Изменено в версии 3.1: Отрицательное значение *pylong* теперь вызывает [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError), а не [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError).224225#### `unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)`226227*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*228229Возвращает C-представление unsigned long объекта *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject).230231Если значение *obj* выходит за пределы диапазона для unsigned long, возвращается приведение этого значения по модулю `ULONG_MAX + 1`.232233При ошибке возвращает `(unsigned long)-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.234235Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__), если доступно.236237Изменено в версии 3.10: Эта функция больше не использует [`__int__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__int__).238239#### `unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)`240241*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*242243Возвращает представление unsigned long long на языке C для *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject), сначала вызывается его метод [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject).244245Если значение *obj* выходит за пределы диапазона для unsigned long long, возвращается приведение этого значения по модулю `ULLONG_MAX + 1`.246247При ошибке возвращает `(unsigned long long)-1`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.248249Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__index__), если доступно.250251Изменено в версии 3.10: Эта функция больше не использует [`__int__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__int__).252253#### `double PyLong_AsDouble(PyObject *pylong)`254255*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*256257Возвращает представление double на языке C для *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.12/c-api/long.html#c.PyLongObject).258259Возбуждает исключение [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона для double.260261При ошибке возвращает `-1.0`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.262263#### `void *PyLong_AsVoidPtr(PyObject *pylong)`264265*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*266267Преобразует целое число Python *pylong* в указатель void на языке C. Если *pylong* не удаётся преобразовать, возбуждается исключение [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError). Это гарантирует, что полученный указатель void будет пригоден для использования только для значений, созданных с помощью [`PyLong_FromVoidPtr()`](https://python-all.ru/3.12/c-api/long.html#c.PyLong_FromVoidPtr).268269При ошибке возвращает `NULL`. Используйте [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred) для разрешения неоднозначности.270271#### `PyObject *PyLong_GetInfo(void)`272273*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*274275В случае успеха возвращает доступный только для чтения [именованный кортеж](https://python-all.ru/3.12/glossary.html#term-named-tuple), содержащий информацию о внутреннем представлении целых чисел в Python. Описание отдельных полей см. в [`sys.int_info`](https://python-all.ru/3.12/library/sys.html#sys.int_info).276277При ошибке возвращает `NULL` с установленным исключением.278279Добавлено в версии 3.1.280281#### `int PyUnstable_Long_IsCompact(const PyLongObject *op)`282283> *Это [нестабильное API](https://python-all.ru/3.12/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*284285Возвращает 1, если *op* компактный, и 0 в противном случае.286287Эта функция позволяет коду, критичному к производительности, реализовать «быстрый путь» для малых целых чисел. Для компактных значений используйте [`PyUnstable_Long_CompactValue()`](https://python-all.ru/3.12/c-api/long.html#c.PyUnstable_Long_CompactValue); для остальных – обратитесь к функции [`PyLong_As*`](https://python-all.ru/3.12/c-api/long.html#c.PyLong_AsSize_t) или [`calling`](https://python-all.ru/3.12/c-api/call.html#c.PyObject_CallMethod) [`int.to_bytes()`](https://python-all.ru/3.12/library/stdtypes.html#int.to_bytes).288289Ожидается, что ускорение будет незначительным для большинства пользователей.290291Какие именно значения считаются компактными, является деталью реализации и может измениться.292293Добавлено в версии 3.12.294295#### `Py_ssize_t PyUnstable_Long_CompactValue(const PyLongObject *op)`296297> *Это [нестабильное API](https://python-all.ru/3.12/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*298299Если *op* компактный, как определено с помощью [`PyUnstable_Long_IsCompact()`](https://python-all.ru/3.12/c-api/long.html#c.PyUnstable_Long_IsCompact), вернуть его значение.300301В противном случае возвращаемое значение не определено.302303Добавлено в версии 3.12.304