整数对象 — Python 文档
整数对象
所有整数都被实现为任意大小的“长”整数对象。
出错时,大多数 PyLong_As*
API 返回 (return type)-1
无法与数字区分。 使用 PyErr_Occurred() 消除歧义。
- type PyLongObject
- PyObject 的这个子类型表示一个 Python 整数对象。
- PyTypeObject PyLong_Type
- PyTypeObject 的这个实例表示 Python 整数类型。 这与 Python 层中的 int 是同一个对象。
- int PyLong_Check(PyObject *p)
- 如果其参数是 PyLongObject 或 PyLongObject 的子类型,则返回 true。 此功能总是成功。
- int PyLong_CheckExact(PyObject *p)
- 如果其参数是 PyLongObject,但不是 PyLongObject 的子类型,则返回 true。 此功能总是成功。
- PyObject *PyLong_FromLong(long v)
失败时从 v 或
NULL
返回一个新的 PyLongObject 对象。当前的实现为
-5
和256
之间的所有整数保留了一个整数对象数组,当您在该范围内创建一个 int 时,您实际上只是返回对现有对象的引用。
- PyObject *PyLong_FromUnsignedLong(unsigned long v)
- 失败时从 C unsigned long 或
NULL
返回一个新的 PyLongObject 对象。
- PyObject *PyLong_FromSsize_t(Py_ssize_t v)
- 失败时从 C
Py_ssize_t
或NULL
返回一个新的 PyLongObject 对象。
- PyObject *PyLong_FromSize_t(size_t v)
- 失败时从 C
size_t
或NULL
返回一个新的 PyLongObject 对象。
- PyObject *PyLong_FromLongLong(long long v)
- 失败时从 C long long 或
NULL
返回一个新的 PyLongObject 对象。
- PyObject *PyLong_FromUnsignedLongLong(unsigned long long v)
- 失败时从 C unsigned long long 或
NULL
返回一个新的 PyLongObject 对象。
- PyObject *PyLong_FromDouble(double v)
- 失败时从 v 或
NULL
的整数部分返回一个新的 PyLongObject 对象。
- PyObject *PyLong_FromString(const char *str, char **pend, int base)
- 根据 str 中的字符串值返回一个新的 PyLongObject,根据 base 中的基数进行解释。 如果 pend 是非
NULL
,则 *pend 将指向 str 中的第一个字符,它跟随着数字的表示。 如果 base 是0
,则 str 使用 Integer 文字 定义进行解释; 在这种情况下,非零十进制数中的前导零会引发 ValueError。 如果 base 不是0
,则它必须介于2
和36
之间,包括两者。 忽略基本说明符之后和数字之间的前导空格和单个下划线。 如果没有数字,将引发 ValueError。
- PyObject *PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
- 将 Unicode 数字序列转换为 Python 整数值。
- PyObject *PyLong_FromUnicodeObject(PyObject *u, int base)
将字符串 u 中的 Unicode 数字序列转换为 Python 整数值。
3.3 版中的新功能。
- PyObject *PyLong_FromVoidPtr(void *p)
- 从指针 p 创建一个 Python 整数。 可以使用 PyLong_AsVoidPtr() 从结果值中检索指针值。
- long PyLong_AsLong(PyObject *obj)
返回 obj 的 C long 表示。 如果 obj 不是 PyLongObject 的实例,首先调用其
__index__()
或__int__()
方法(如果存在)将其转换为 PyLongObject。如果 obj 的值超出 long 的范围,则引发 OverflowError。
出错时返回
-1
。 使用 PyErr_Occurred() 消除歧义。在 3.8 版更改:如果可用,请使用
__index__()
。自 3.8 版起已弃用: 不推荐使用
__int__()
。
- long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)
返回 obj 的 C long 表示。 如果 obj 不是 PyLongObject 的实例,首先调用其
__index__()
或__int__()
方法(如果存在)将其转换为 PyLongObject。如果obj的值大于
LONG_MAX
或小于LONG_MIN
,设置*overflow为1
或-1
,分别返回-1
; 否则,将 *溢出 设置为0
。 如果发生任何其他异常,将 *overflow 设置为0
并照常返回-1
。出错时返回
-1
。 使用 PyErr_Occurred() 消除歧义。在 3.8 版更改:如果可用,请使用
__index__()
。自 3.8 版起已弃用: 不推荐使用
__int__()
。
- long long PyLong_AsLongLong(PyObject *obj)
返回 obj 的 C long long 表示。 如果 obj 不是 PyLongObject 的实例,首先调用其
__index__()
或__int__()
方法(如果存在)将其转换为 PyLongObject。如果 obj 的值超出 long long 的范围,则引发 OverflowError。
出错时返回
-1
。 使用 PyErr_Occurred() 消除歧义。在 3.8 版更改:如果可用,请使用
__index__()
。自 3.8 版起已弃用: 不推荐使用
__int__()
。
- long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)
返回 obj 的 C long long 表示。 如果 obj 不是 PyLongObject 的实例,首先调用其
__index__()
或__int__()
方法(如果存在)将其转换为 PyLongObject。如果obj的值大于
LLONG_MAX
或小于LLONG_MIN
,设置*overflow为1
或-1
,分别返回-1
; 否则,将 *溢出 设置为0
。 如果发生任何其他异常,将 *overflow 设置为0
并照常返回-1
。出错时返回
-1
。 使用 PyErr_Occurred() 消除歧义。3.2 版中的新功能。
在 3.8 版更改:如果可用,请使用
__index__()
。自 3.8 版起已弃用: 不推荐使用
__int__()
。
- Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)
返回 pylong 的 C
Py_ssize_t
表示。 pylong 必须是 PyLongObject 的实例。如果 pylong 的值超出
Py_ssize_t
的范围,则引发 OverflowError。出错时返回
-1
。 使用 PyErr_Occurred() 消除歧义。
- unsigned long PyLong_AsUnsignedLong(PyObject *pylong)
返回 pylong 的 C unsigned long 表示。 pylong 必须是 PyLongObject 的实例。
如果 pylong 的值超出 unsigned long 的范围,则引发 OverflowError。
出错时返回
(unsigned long)-1
。 使用 PyErr_Occurred() 消除歧义。
- size_t PyLong_AsSize_t(PyObject *pylong)
返回 pylong 的 C
size_t
表示。 pylong 必须是 PyLongObject 的实例。如果 pylong 的值超出
size_t
的范围,则引发 OverflowError。出错时返回
(size_t)-1
。 使用 PyErr_Occurred() 消除歧义。
- unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)
返回 pylong 的 C unsigned long long 表示。 pylong 必须是 PyLongObject 的实例。
如果 pylong 的值超出 unsigned long long 的范围,则引发 OverflowError。
出错时返回
(unsigned long long)-1
。 使用 PyErr_Occurred() 消除歧义。3.1 版更改: 负值 pylong 现在引发 OverflowError,而不是 TypeError。
- unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)
返回 obj 的 C unsigned long 表示。 如果 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)
返回 obj 的 C unsigned long long 表示。 如果 obj 不是 PyLongObject 的实例,首先调用其
__index__()
或__int__()
方法(如果存在)将其转换为 PyLongObject。如果 obj 的值超出 unsigned long long 的范围,则返回该值的减模
ULLONG_MAX + 1
。出错时返回
(unsigned long long)-1
。 使用 PyErr_Occurred() 消除歧义。在 3.8 版更改:如果可用,请使用
__index__()
。自 3.8 版起已弃用: 不推荐使用
__int__()
。
- double PyLong_AsDouble(PyObject *pylong)
返回 pylong 的 C double 表示。 pylong 必须是 PyLongObject 的实例。
如果 pylong 的值超出 double 的范围,则引发 OverflowError。
出错时返回
-1.0
。 使用 PyErr_Occurred() 消除歧义。
- void *PyLong_AsVoidPtr(PyObject *pylong)
将 Python 整数 pylong 转换为 C void 指针。 如果 pylong 无法转换,则会引发 OverflowError。 这只能确保为使用 PyLong_FromVoidPtr() 创建的值生成可用的 void 指针。
出错时返回
NULL
。 使用 PyErr_Occurred() 消除歧义。