数字协议

int PyNumber_Check(PyObject *o)
属于稳定 ABI的一部分。

如果对象 *o* 提供了数字协议,则返回 1,否则返回 false。此函数总是成功。

在 3.8 版本中变更: 如果 *o* 是索引整数,则返回 1

PyObject *PyNumber_Add(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 *o1* 和 *o2* 相加的结果,失败时返回 NULL。这等价于 Python 表达式 o1 + o2

PyObject *PyNumber_Subtract(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 *o1* 减去 *o2* 的结果,失败时返回 NULL。这等价于 Python 表达式 o1 - o2

PyObject *PyNumber_Multiply(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 *o1* 和 *o2* 相乘的结果,失败时返回 NULL。这等价于 Python 表达式 o1 * o2

PyObject *PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2)
返回值:新的引用。自 3.7 版本起,属于稳定 ABI的一部分。

返回 *o1* 和 *o2* 的矩阵乘法结果,失败时返回 NULL。这等价于 Python 表达式 o1 @ o2

在 3.5 版本中加入。

PyObject *PyNumber_FloorDivide(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 *o1* 除以 *o2* 的向下取整结果,失败时返回 NULL。这等价于 Python 表达式 o1 // o2

PyObject *PyNumber_TrueDivide(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 *o1* 除以 *o2* 的数学值的合理近似值,失败时返回 NULL。返回值是“近似的”,因为二进制浮点数是近似的;不可能用二进制表示所有实数。当传入两个整数时,此函数可以返回一个浮点数值。这等价于 Python 表达式 o1 / o2

PyObject *PyNumber_Remainder(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 *o1* 除以 *o2* 的余数,失败时返回 NULL。这等价于 Python 表达式 o1 % o2

PyObject *PyNumber_Divmod(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

请参阅内置函数 divmod()。失败时返回 NULL。这等价于 Python 表达式 divmod(o1, o2)

PyObject *PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3)
返回值:新的引用。属于稳定 ABI的一部分。

请参阅内置函数 pow()。失败时返回 NULL。 这等效于 Python 表达式 pow(o1, o2, o3),其中 o3 是可选的。如果要忽略 o3,请传递 Py_None 代替(为 o3 传递 NULL 会导致非法内存访问)。

PyObject *PyNumber_Negative(PyObject *o)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回 o 的负值,失败时返回 NULL。这等效于 Python 表达式 -o

PyObject *PyNumber_Positive(PyObject *o)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回 o,失败时返回 NULL。这等效于 Python 表达式 +o

PyObject *PyNumber_Absolute(PyObject *o)
返回值:新的引用。属于稳定 ABI的一部分。

返回 o 的绝对值,失败时返回 NULL。这等效于 Python 表达式 abs(o)

PyObject *PyNumber_Invert(PyObject *o)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回 o 的按位取反值,失败时返回 NULL。这等效于 Python 表达式 ~o

PyObject *PyNumber_Lshift(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回将 o1 左移 o2 的结果,失败时返回 NULL。这等效于 Python 表达式 o1 << o2

PyObject *PyNumber_Rshift(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回将 o1 右移 o2 的结果,失败时返回 NULL。这等效于 Python 表达式 o1 >> o2

PyObject *PyNumber_And(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回 o1o2 的“按位与”结果,失败时返回 NULL。这等效于 Python 表达式 o1 & o2

PyObject *PyNumber_Xor(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回 o1o2 的“按位异或”结果,失败时返回 NULL。这等效于 Python 表达式 o1 ^ o2

PyObject *PyNumber_Or(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回 o1o2 的“按位或”结果,失败时返回 NULL。这等效于 Python 表达式 o1 | o2

PyObject *PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 o1o2 相加的结果,失败时返回 NULL。当 o1 支持时,该操作是就地完成的。这等效于 Python 语句 o1 += o2

PyObject *PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 o1 减去 o2 的结果,失败时返回 NULL。当 o1 支持时,该操作是就地完成的。这等效于 Python 语句 o1 -= o2

PyObject *PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 o1o2 相乘的结果,或者在失败时返回 NULL。当 o1 支持时,该操作会就地执行。这等同于 Python 语句 o1 *= o2

PyObject *PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2)
返回值:新的引用。自 3.7 版本起,属于稳定 ABI的一部分。

返回 o1o2 矩阵相乘的结果,或者在失败时返回 NULL。当 o1 支持时,该操作会就地执行。这等同于 Python 语句 o1 @= o2

在 3.5 版本中加入。

PyObject *PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 o1 除以 o2 的数学向下取整结果,或者在失败时返回 NULL。当 o1 支持时,该操作会就地执行。这等同于 Python 语句 o1 //= o2

PyObject *PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 o1 除以 o2 的数学值的合理近似值,或者在失败时返回 NULL。返回值是“近似值”,因为二进制浮点数是近似值;不可能用二进制表示所有实数。当传递两个整数时,此函数可以返回一个浮点值。当 o1 支持时,该操作会就地执行。这等同于 Python 语句 o1 /= o2

PyObject *PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

返回 o1 除以 o2 的余数,或者在失败时返回 NULL。当 o1 支持时,该操作会就地执行。这等同于 Python 语句 o1 %= o2

PyObject *PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)
返回值:新的引用。属于稳定 ABI的一部分。

请参阅内置函数 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)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回将 o1 左移 o2 的结果,或者在失败时返回 NULL。当 o1 支持时,该操作会就地执行。这等同于 Python 语句 o1 <<= o2

PyObject *PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回将 o1 右移 o2 的结果,或者在失败时返回 NULL。当 o1 支持时,该操作会就地执行。这等同于 Python 语句 o1 >>= o2

PyObject *PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回 o1o2 的“按位与”结果,失败时返回 NULL。当 o1 支持时,该操作会就地执行。这等同于 Python 语句 o1 &= o2

PyObject *PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回 o1o2 的“按位异或”结果,失败时返回 NULL。当 o1 支持时,此操作是原地进行的。这等效于 Python 语句 o1 ^= o2

PyObject *PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回 o1o2 的“按位或”结果,失败时返回 NULL。当 o1 支持时,此操作是原地进行的。这等效于 Python 语句 o1 |= o2

PyObject *PyNumber_Long(PyObject *o)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回转换为整数对象的 o,失败时返回 NULL。这等效于 Python 表达式 int(o)

PyObject *PyNumber_Float(PyObject *o)
返回值:新的引用。属于稳定 ABI的一部分。

成功时返回转换为浮点数对象的 o,失败时返回 NULL。这等效于 Python 表达式 float(o)

PyObject *PyNumber_Index(PyObject *o)
返回值:新的引用。属于稳定 ABI的一部分。

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

在 3.10 版本中更改: 结果始终具有精确的类型 int。以前,结果可能是 int 的子类的实例。

PyObject *PyNumber_ToBase(PyObject *n, int base)
返回值:新的引用。属于稳定 ABI的一部分。

将整数 n 转换为以 base 为底的字符串并返回。base 参数必须为 2、8、10 或 16 之一。对于 2、8 或 16 进制,返回的字符串分别以 '0b''0o''0x' 的进制标记为前缀。如果 n 不是 Python int,则首先使用 PyNumber_Index() 进行转换。

Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)
属于稳定 ABI的一部分。

如果 o 可以被解释为整数,则返回转换为 Py_ssize_t 值的结果。如果调用失败,则引发异常并返回 -1

如果 o 可以转换为 Python int,但尝试转换为 Py_ssize_t 值将引发 OverflowError,则 exc 参数将是要引发的异常的类型(通常为 IndexErrorOverflowError)。如果 excNULL,则会清除异常,并将该值剪切为负整数的 PY_SSIZE_T_MIN 或正整数的 PY_SSIZE_T_MAX

int PyIndex_Check(PyObject *o)
自 3.8 版本以来,属于 稳定的 ABI

如果 o 是索引整数(在 tp_as_number 结构的 nb_index 插槽中填充了值),则返回 1,否则返回 0。此函数始终成功。