整数型对象

所有整数都使用以任意大小的长整数对象表示。

在出错时,大多数 PyLong_As* API返回 (返回类型)-1 ,无法与一般的数字区分开来。请使用 PyErr_Occurred() 来区分。

type PyLongObject
Part of the Stable ABI.

表示 Python 整数对象的 PyObject 子类型。

PyTypeObject PyLong_Type
Part of the Stable ABI.

这个 PyTypeObject 的实例表示 Python 的整数类型。与Python层中的 int 相同。

int PyLong_Check(PyObject *p)

如果它的参数是 PyLongObjectPyLongObject 的子类型则返回真值。 此函数总是会成功执行。

int PyLong_CheckExact(PyObject *p)

如果它的参数是 PyLongObject,但不是 PyLongObject 的子类型则返回真值。 此函数总是会成功执行。

PyObject *PyLong_FromLong(long v)
Return value: New reference. Part of the Stable ABI.

v 返回一个新的 PyLongObject 对象,失败时返回 NULL

当前的实现维护了一个整数对象数组,包含 -5256 之间的所有整数对象。当你在这个范围内创建一个 int 时,实际上得到的是一个对已有对象的引用。

PyObject *PyLong_FromUnsignedLong(unsigned long v)
Return value: New reference. Part of the Stable ABI.

由 C unsigned long 类型返回一个新的 PyLongObject 对象,失败时返回 NULL

PyObject *PyLong_FromSsize_t(Py_ssize_t v)
Return value: New reference. Part of the Stable ABI.

从 C Py_ssize_t 类型返回一个新的 PyLongObject 对象,如果失败则返回 NULL

PyObject *PyLong_FromSize_t(size_t v)
Return value: New reference. Part of the Stable ABI.

从 C size_t 返回一个新的 PyLongObject 对象,如果失败则返回 NULL

PyObject *PyLong_FromLongLong(long long v)
Return value: New reference. Part of the Stable ABI.

从 C long long 返回一个新的 PyLongObject 对象,失败时返回 NULL

PyObject *PyLong_FromUnsignedLongLong(unsigned long long v)
Return value: New reference. Part of the Stable ABI.

从 C unsigned long long 返回一个新的 PyLongObject 对象,失败时返回 NULL

PyObject *PyLong_FromDouble(double v)
Return value: New reference. Part of the Stable ABI.

v 的整数部分返回一个新的 PyLongObject 对象,如果失败则返回 NULL

PyObject *PyLong_FromString(const char *str, char **pend, int base)
Return value: New reference. Part of the Stable ABI.

根据 str 字符串值返回一个新的 PyLongObjectbase 指定基数。如果 pend 不是 NULL/*pend 将指向 str 中表示这个数字部分的后面的第一个字符。如果 base0str 将使用 整数字面值 定义来解释;在这种情况下,一个非零的十进制数中的前导零会引发一个 ValueError 。如果 base 不是 0 ,它必须在 236 之间,包括2和36。基数说明符后以及数字之间的前导空格、单下划线将被忽略。如果没有数字,将引发 ValueError

PyObject *PyLong_FromUnicodeObject(PyObject *u, int base)
Return value: New reference.

将字符串 u 中的 Unicode 数字序列转换为 Python 整数值。

3.3 新版功能.

PyObject *PyLong_FromVoidPtr(void *p)
Return value: New reference. Part of the Stable ABI.

从指针 p 创建一个 Python 整数。可以使用 PyLong_AsVoidPtr() 返回的指针值。

long PyLong_AsLong(PyObject *obj)
Part of the Stable ABI.

Return a C long representation of obj. If obj is not an instance of PyLongObject, first call its __index__() method (if present) to convert it to a PyLongObject.

如果 obj 的值溢出了 long 的范围,会引发 OverflowError

发生错误时返回 -1 。使用 PyErr_Occurred() 来消歧义。

在 3.8 版更改: 如果可用将使用 __index__()

在 3.10 版更改: This function will no longer use __int__().

long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)
Part of the Stable ABI.

Return a C long representation of obj. If obj is not an instance of PyLongObject, first call its __index__() method (if present) to convert it to a PyLongObject.

If the value of obj is greater than LONG_MAX or less than LONG_MIN, set *overflow to 1 or -1, respectively, and return -1; otherwise, set *overflow to 0. If any other exception occurs set *overflow to 0 and return -1 as usual.

发生错误时返回 -1 。使用 PyErr_Occurred() 来消歧义。

在 3.8 版更改: 如果可用将使用 __index__()

在 3.10 版更改: This function will no longer use __int__().

long long PyLong_AsLongLong(PyObject *obj)
Part of the Stable ABI.

Return a C long long representation of obj. If obj is not an instance of PyLongObject, first call its __index__() method (if present) to convert it to a PyLongObject.

如果 obj 值超出 long long ,触发 OverflowError

发生错误时返回 -1 。使用 PyErr_Occurred() 来消歧义。

在 3.8 版更改: 如果可用将使用 __index__()

在 3.10 版更改: This function will no longer use __int__().

long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)
Part of the Stable ABI.

Return a C long long representation of obj. If obj is not an instance of PyLongObject, first call its __index__() method (if present) to convert it to a PyLongObject.

If the value of obj is greater than LLONG_MAX or less than LLONG_MIN, set *overflow to 1 or -1, respectively, and return -1; otherwise, set *overflow to 0. If any other exception occurs set *overflow to 0 and return -1 as usual.

发生错误时返回 -1 。使用 PyErr_Occurred() 来消歧义。

3.2 新版功能.

在 3.8 版更改: 如果可用将使用 __index__()

在 3.10 版更改: This function will no longer use __int__().

Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)
Part of the Stable ABI.

Return a C Py_ssize_t representation of pylong. pylong must be an instance of PyLongObject.

Raise OverflowError if the value of pylong is out of range for a Py_ssize_t.

发生错误时返回 -1 。使用 PyErr_Occurred() 来消歧义。

unsigned long PyLong_AsUnsignedLong(PyObject *pylong)
Part of the Stable ABI.

Return a C unsigned long representation of pylong. pylong must be an instance of PyLongObject.

Raise OverflowError if the value of pylong is out of range for a unsigned long.

Returns (unsigned long)-1 on error. Use PyErr_Occurred() to disambiguate.

size_t PyLong_AsSize_t(PyObject *pylong)
Part of the Stable ABI.

Return a C size_t representation of pylong. pylong must be an instance of PyLongObject.

Raise OverflowError if the value of pylong is out of range for a size_t.

Returns (size_t)-1 on error. Use PyErr_Occurred() to disambiguate.

unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)
Part of the Stable ABI.

Return a C unsigned long long representation of pylong. pylong must be an instance of PyLongObject.

Raise OverflowError if the value of pylong is out of range for an unsigned long long.

Returns (unsigned long long)-1 on error. Use PyErr_Occurred() to disambiguate.

在 3.1 版更改: A negative pylong now raises OverflowError, not TypeError.

unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)
Part of the Stable ABI.

Return a C unsigned long representation of obj. If obj is not an instance of PyLongObject, first call its __index__() method (if present) to convert it to a PyLongObject.

If the value of obj is out of range for an unsigned long, return the reduction of that value modulo ULONG_MAX + 1.

Returns (unsigned long)-1 on error. Use PyErr_Occurred() to disambiguate.

在 3.8 版更改: 如果可用将使用 __index__()

在 3.10 版更改: This function will no longer use __int__().

unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)
Part of the Stable ABI.

Return a C unsigned long long representation of obj. If obj is not an instance of PyLongObject, first call its __index__() method (if present) to convert it to a PyLongObject.

If the value of obj is out of range for an unsigned long long, return the reduction of that value modulo ULLONG_MAX + 1.

Returns (unsigned long long)-1 on error. Use PyErr_Occurred() to disambiguate.

在 3.8 版更改: 如果可用将使用 __index__()

在 3.10 版更改: This function will no longer use __int__().

double PyLong_AsDouble(PyObject *pylong)
Part of the Stable ABI.

Return a C double representation of pylong. pylong must be an instance of PyLongObject.

Raise OverflowError if the value of pylong is out of range for a double.

Returns -1.0 on error. Use PyErr_Occurred() to disambiguate.

void *PyLong_AsVoidPtr(PyObject *pylong)
Part of the Stable ABI.

Convert a Python integer pylong to a C void pointer. If pylong cannot be converted, an OverflowError will be raised. This is only assured to produce a usable void pointer for values created with PyLong_FromVoidPtr().

Returns NULL on error. Use PyErr_Occurred() to disambiguate.