数字协议 — Python 文档

来自菜鸟教程
Python/docs/2.7/c-api/number
跳转至:导航、​搜索

号码协议

int PyNumber_Check(PyObject *o)
如果对象 o 提供数字协议,则返回 1,否则返回 false。 此功能总是成功。
PyObject *PyNumber_Add(PyObject *o1, PyObject *o2)
返回添加 o1o2 的结果,或失败时返回 NULL。 这相当于 Python 表达式 o1 + o2
PyObject *PyNumber_Subtract(PyObject *o1, PyObject *o2)
返回从 o1 中减去 o2 的结果,或失败时返回 NULL。 这相当于 Python 表达式 o1 - o2
PyObject *PyNumber_Multiply(PyObject *o1, PyObject *o2)
返回乘以 o1o2 的结果,或失败时返回 NULL。 这相当于 Python 表达式 o1 * o2
PyObject *PyNumber_Divide(PyObject *o1, PyObject *o2)
返回 o1 除以 o2 的结果,失败时返回 NULL。 这相当于 Python 表达式 o1 / o2
PyObject *PyNumber_FloorDivide(PyObject *o1, PyObject *o2)

返回 o1 除以 o2 的下限,或失败时返回 NULL。 这相当于整数的“经典”除法。

2.2 版中的新功能。

PyObject *PyNumber_TrueDivide(PyObject *o1, PyObject *o2)

在失败时返回 o1 除以 o2NULL 的数学值的合理近似值。 返回值是“近似值”,因为二进制浮点数是近似值; 不可能以二为底表示所有实数。 当传递两个整数时,此函数可以返回一个浮点值。

2.2 版中的新功能。

PyObject *PyNumber_Remainder(PyObject *o1, PyObject *o2)
返回 o1 除以 o2 的余数,或失败时返回 NULL。 这相当于 Python 表达式 o1 % o2
PyObject *PyNumber_Divmod(PyObject *o1, PyObject *o2)
请参阅内置函数 divmod()。 失败时返回 NULL。 这相当于 Python 表达式 divmod(o1, o2)
PyObject *PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3)
见内置函数pow()。 失败时返回 NULL。 这相当于 Python 表达式 pow(o1, o2, o3),其中 o3 是可选的。 如果要忽略 o3,则在其位置传递 Py_None(为 o3 传递 NULL 会导致非法内存访问)。
PyObject *PyNumber_Negative(PyObject *o)
成功时返回 o 的否定,失败时返回 NULL。 这相当于 Python 表达式 -o
PyObject *PyNumber_Positive(PyObject *o)
成功时返回 o,失败时返回 NULL。 这相当于 Python 表达式 +o
PyObject *PyNumber_Absolute(PyObject *o)
失败时返回 oNULL 的绝对值。 这相当于 Python 表达式 abs(o)
PyObject *PyNumber_Invert(PyObject *o)
成功时返回 o 的按位否定,失败时返回 NULL。 这相当于 Python 表达式 ~o
PyObject *PyNumber_Lshift(PyObject *o1, PyObject *o2)
成功时返回 o1 左移 o2 的结果,失败时返回 NULL。 这相当于 Python 表达式 o1 << o2
PyObject *PyNumber_Rshift(PyObject *o1, PyObject *o2)
成功返回 o1 右移 o2 的结果,失败返回 NULL。 这相当于 Python 表达式 o1 >> o2
PyObject *PyNumber_And(PyObject *o1, PyObject *o2)
成功时返回 o1o2 的“按位与”,失败时返回 NULL。 这相当于 Python 表达式 o1 & o2
PyObject *PyNumber_Xor(PyObject *o1, PyObject *o2)
成功时返回 o1 的“按位异或”通过 o2,失败时返回 NULL。 这相当于 Python 表达式 o1 ^ o2
PyObject *PyNumber_Or(PyObject *o1, PyObject *o2)
成功时返回 o1o2 的“按位或”,失败时返回 NULL。 这相当于 Python 表达式 o1 | o2
PyObject *PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)
返回添加 o1o2 的结果,或失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句 o1 += o2
PyObject *PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2)
返回从 o1 中减去 o2 的结果,或失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句 o1 -= o2
PyObject *PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2)
返回乘以 o1o2 的结果,或失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句 o1 *= o2
PyObject *PyNumber_InPlaceDivide(PyObject *o1, PyObject *o2)
返回 o1 除以 o2 的结果,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句 o1 /= o2
PyObject *PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)

返回失败时将 o1 除以 o2NULL 的数学底线。 当o1支持时,该操作在就地完成。 这相当于 Python 语句 o1 //= o2

2.2 版中的新功能。

PyObject *PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)

在失败时返回 o1 除以 o2NULL 的数学值的合理近似值。 返回值是“近似值”,因为二进制浮点数是近似值; 不可能以二为底表示所有实数。 当传递两个整数时,此函数可以返回一个浮点值。 当o1支持时,该操作在就地完成。

2.2 版中的新功能。

PyObject *PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)
返回 o1 除以 o2 的余数,或失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句 o1 %= o2
PyObject *PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)
见内置函数pow()。 失败时返回 NULL。 当o1支持时,该操作在就地完成。 当 o3 为 Py_None 时,这等效于 Python 语句 o1 **= o2,否则为 pow(o1, o2, o3) 的就地变体。 如果要忽略 o3,则在其位置传递 Py_None(为 o3 传递 NULL 会导致非法内存访问)。
PyObject *PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2)
成功时返回 o1 左移 o2 的结果,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句 o1 <<= o2
PyObject *PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)
成功返回 o1 右移 o2 的结果,失败返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句 o1 >>= o2
PyObject *PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)
成功时返回 o1o2 的“按位与”,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句 o1 &= o2
PyObject *PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)
成功时返回 o1 的“按位异或”通过 o2,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句 o1 ^= o2
PyObject *PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)
成功时返回 o1o2 的“按位或”,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句 o1 |= o2
int PyNumber_Coerce(PyObject **p1, PyObject **p2)
此函数采用 PyObject* 类型的两个变量的地址。 如果 *p1*p2 指向的对象具有相同的类型,则增加它们的引用计数并返回 0(成功)。 如果对象可以转换为通用数字类型,则将 *p1*p2 替换为其转换后的值(带有“新”引用计数),并返回 0。 如果无法进行转换,或者发生其他错误,则返回 -1(失败)并且不增加引用计数。 调用 PyNumber_Coerce(&o1, &o2) 等价于 Python 语句 o1, o2 = coerce(o1, o2)
int PyNumber_CoerceEx(PyObject **p1, PyObject **p2)
此函数类似于 PyNumber_Coerce(),不同之处在于它在无法转换且未引发错误时返回 1。 在这种情况下,引用计数仍然没有增加。
PyObject *PyNumber_Int(PyObject *o)
成功时返回 o 转换为整数对象,失败时返回 NULL。 如果参数超出整数范围,则将返回一个 long 对象。 这相当于 Python 表达式 int(o)
PyObject *PyNumber_Long(PyObject *o)
成功时返回 o 转换为长整数对象,失败时返回 NULL。 这相当于 Python 表达式 long(o)
PyObject *PyNumber_Float(PyObject *o)
成功时返回 o 转换为浮点对象,失败时返回 NULL。 这相当于 Python 表达式 float(o)
PyObject *PyNumber_Index(PyObject *o)

返回转换为 Python int 或 long 的 o 成功或 NULL 失败时引发 TypeError 异常。

2.5 版中的新功能。

PyObject *PyNumber_ToBase(PyObject *n, int base)

返回整数 n 转换为 base 作为一个字符串,基本标记为 '0b''0o''0x'(如果适用) . 当 base 不是 2、8、10 或 16 时,格式为 'x#num',其中 x 是基数。 如果 n 不是 int 对象,则首先使用 PyNumber_Index() 进行转换。

2.6 版中的新功能。

Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)

如果 o 可以解释为整数,则返回 o 转换为 Py_ssize_t 值。 如果 o 可以转换为 Python int 或 long 但尝试转换为 Py_ssize_t 值会引发 OverflowError,则 exc 参数是将引发的异常(通常为 IndexErrorOverflowError)。 如果 excNULL,则清除异常并将值剪裁为 PY_SSIZE_T_MIN 表示负整数或 PY_SSIZE_T_MAX 表示正整数整数。

2.5 版中的新功能。

int PyIndex_Check(PyObject *o)

如果 o 是索引整数(填充了 tp_as_number 结构的 nb_index 槽),则返回 1,否则返回 0

2.5 版中的新功能。