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

long.md

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

1> **Источник:** https://python-all.ru/3.2/c-api/long.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Целочисленные объекты89Все целые числа реализованы как «длинные» целочисленные объекты произвольного размера.1011**`PyLongObject`**1213Этот подтип [`PyObject`](https://python-all.ru/3.2/c-api/structures.html#PyObject) представляет целочисленный объект Python.1415**[PyTypeObject](https://python-all.ru/3.2/c-api/type.html#PyTypeObject) `PyLong_Type`**1617Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.2/c-api/type.html#PyTypeObject) представляет целочисленный тип Python. Это тот же объект, что и [`int`](https://python-all.ru/3.2/library/functions.html#int) на уровне Python.1819#### `int PyLong_Check(PyObject *p)`2021Возвращает истину, если аргумент является [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject) или подтипом [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).2223#### `int PyLong_CheckExact(PyObject *p)`2425Возвращает истину, если аргумент является [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject), но не подтипом [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).2627#### `PyObject* PyLong_FromLong(long v)`2829*Возвращаемое значение: новая ссылка.*3031Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject) из *v* или *NULL* в случае ошибки.3233Текущая реализация хранит массив объектов целых чисел для всех целых чисел между `-5` и `256`. Когда создаётся int в этом диапазоне, фактически возвращается ссылка на существующий объект. Поэтому изменение значения `1` должно быть возможным. Поведение Python в этом случае, вероятно, не определено. :-)3435#### `PyObject* PyLong_FromUnsignedLong(unsigned long v)`3637*Возвращаемое значение: новая ссылка.*3839Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject) из C `unsigned long` или *NULL* в случае ошибки.4041#### `PyObject* PyLong_FromSsize_t(Py_ssize_t v)`4243Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject) из C `Py_ssize_t` или *NULL* в случае ошибки.4445#### `PyObject* PyLong_FromSize_t(size_t v)`4647Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject) из C `size_t` или *NULL* в случае ошибки.4849#### `PyObject* PyLong_FromLongLong(PY_LONG_LONG v)`5051*Возвращаемое значение: новая ссылка.*5253Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject) из C `long long` или *NULL* в случае ошибки.5455#### `PyObject* PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG v)`5657*Возвращаемое значение: новая ссылка.*5859Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject) из C `unsigned long long` или *NULL* в случае ошибки.6061#### `PyObject* PyLong_FromDouble(double v)`6263*Возвращаемое значение: новая ссылка.*6465Возвращает новый объект [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject) из целой части *v* или *NULL* в случае ошибки.6667#### `PyObject* PyLong_FromString(char *str, char **pend, int base)`6869*Возвращаемое значение: новая ссылка.*7071Return a new [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject) based on the string value in *str*, which is interpreted according to the radix in *base*. If *pend* is non-*NULL*, *\*pend* will point to the first character in *str* which follows the representation of the number. If *base* is `0`, the radix will be determined based on the leading characters of *str*: if *str* starts with `'0x'` or `'0X'`, radix 16 will be used; if *str* starts with `'0o'` or `'0O'`, radix 8 will be used; if *str* starts with `'0b'` or `'0B'`, radix 2 will be used; otherwise radix 10 will be used. If *base* is not `0`, it must be between `2` and `36`, inclusive. Leading spaces are ignored. If there are no digits, [`ValueError`](https://python-all.ru/3.2/library/exceptions.html#ValueError) will be raised.7273#### `PyObject* PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)`7475*Возвращаемое значение: новая ссылка.*7677Преобразует последовательность цифр Unicode в целочисленное значение Python. Строка Unicode сначала кодируется в байтовую строку с помощью `PyUnicode_EncodeDecimal()`, а затем преобразуется с помощью [`PyLong_FromString()`](https://python-all.ru/3.2/c-api/long.html#PyLong_FromString).7879#### `PyObject* PyLong_FromVoidPtr(void *p)`8081*Возвращаемое значение: новая ссылка.*8283Создает целое число Python из указателя *p*. Значение указателя можно получить из результирующего значения с помощью [`PyLong_AsVoidPtr()`](https://python-all.ru/3.2/c-api/long.html#PyLong_AsVoidPtr).8485#### `long PyLong_AsLong(PyObject *obj)`8687Возвращает представление `long` на языке C для *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject), сначала вызывается его метод [`__int__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__int__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).8889Возбуждает [`OverflowError`](https://python-all.ru/3.2/library/exceptions.html#OverflowError), если значение *obj* выходит за пределы диапазона `long`.9091#### `long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)`9293Возвращает представление `long` на языке C для *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject), сначала вызывается его метод [`__int__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__int__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).9495Если значение *obj* больше `LONG_MAX` или меньше `LONG_MIN`, устанавливает *\*overflow* в `1` или `-1` соответственно и возвращает `-1`; в противном случае устанавливает *\*overflow* в `0`. Если происходит любое другое исключение, устанавливает *\*overflow* в `0` и возвращает `-1` как обычно.9697#### `PY_LONG_LONG PyLong_AsLongLong(PyObject *obj)`9899Возвращает представление `long long` на языке C для *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject), сначала вызывается его метод [`__int__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__int__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).100101Возбуждает [`OverflowError`](https://python-all.ru/3.2/library/exceptions.html#OverflowError), если значение *obj* выходит за пределы диапазона `long`.102103#### `PY_LONG_LONG PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)`104105Возвращает представление `long long` на языке C для *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject), сначала вызывается его метод [`__int__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__int__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).106107Если значение *obj* больше `PY_LLONG_MAX` или меньше `PY_LLONG_MIN`, устанавливает *\*overflow* в `1` или `-1` соответственно и возвращает `-1`; в противном случае устанавливает *\*overflow* в `0`. Если происходит любое другое исключение, устанавливает *\*overflow* в `0` и возвращает `-1` как обычно.108109Новое в версии 3.2.110111#### `Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)`112113Возвращает представление `Py_ssize_t` на языке C для *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).114115Возбуждает [`OverflowError`](https://python-all.ru/3.2/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона `Py_ssize_t`.116117#### `unsigned long PyLong_AsUnsignedLong(PyObject *pylong)`118119Возвращает представление `unsigned long` на языке C для *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).120121Возбуждает [`OverflowError`](https://python-all.ru/3.2/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона `unsigned long`.122123#### `size_t PyLong_AsSize_t(PyObject *pylong)`124125Возвращает представление `size_t` на языке C для *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).126127Возбуждает [`OverflowError`](https://python-all.ru/3.2/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона `size_t`.128129#### `unsigned PY_LONG_LONG PyLong_AsUnsignedLongLong(PyObject *pylong)`130131Возвращает представление `unsigned PY_LONG_LONG` на языке C для *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).132133Возбуждает [`OverflowError`](https://python-all.ru/3.2/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы диапазона `unsigned PY_LONG_LONG`.134135Изменено в версии 3.1: Отрицательное значение *pylong* теперь вызывает [`OverflowError`](https://python-all.ru/3.2/library/exceptions.html#OverflowError), а не [`TypeError`](https://python-all.ru/3.2/library/exceptions.html#TypeError).136137#### `unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)`138139Возвращает представление `unsigned long` на языке C для *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject), сначала вызывается его метод [`__int__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__int__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).140141Если значение *obj* выходит за пределы диапазона `unsigned long`, возвращает остаток от деления этого значения по модулю `ULONG_MAX + 1`.142143#### `unsigned PY_LONG_LONG PyLong_AsUnsignedLongLongMask(PyObject *obj)`144145Возвращает представление `unsigned long long` на языке C для *obj*. Если *obj* не является экземпляром [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject), сначала вызывается его метод [`__int__()`](https://python-all.ru/3.2/reference/datamodel.html#object.__int__) (если он есть) для преобразования в [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).146147Если значение *obj* выходит за пределы диапазона `unsigned long long`, возвращает остаток от деления этого значения по модулю `PY_ULLONG_MAX + 1`.148149#### `double PyLong_AsDouble(PyObject *pylong)`150151Возвращает представление `double` в C для *pylong*. *pylong* должен быть экземпляром [`PyLongObject`](https://python-all.ru/3.2/c-api/long.html#PyLongObject).152153Возбуждает [`OverflowError`](https://python-all.ru/3.2/library/exceptions.html#OverflowError), если значение *pylong* выходит за пределы допустимого диапазона для `double`.154155#### `void* PyLong_AsVoidPtr(PyObject *pylong)`156157Преобразует целое число Python *pylong* в указатель C `void`. Если *pylong* не удаётся преобразовать, возбуждается [`OverflowError`](https://python-all.ru/3.2/library/exceptions.html#OverflowError). Гарантированно получить корректный указатель `void` можно только для значений, созданных с помощью [`PyLong_FromVoidPtr()`](https://python-all.ru/3.2/c-api/long.html#PyLong_FromVoidPtr).158