数字协议

int PyNumber_Check(PyObject *o)

如果对象 ‘o’ 提供数字协议,返回真(1),否则返回假(0)。这个函数总是有返回值的。

PyObject* PyNumber_Add(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1o2*相加的结果,如果失败,返回 *NULL 。等价于Python中的表达式 o1 + o2

PyObject* PyNumber_Subtract(PyObject *o1, PyObject *o2)
Return value: New reference.

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

PyObject* PyNumber_Multiply(PyObject *o1, PyObject *o2)
Return value: New reference.

返回*o1* 、o2*相乘的结果,如果失败,返回 *NULL 。等价于Python中的表达式 o1 * o2

PyObject* PyNumber_Divide(PyObject *o1, PyObject *o2)
Return value: New reference.

Returns the result of dividing o1 by o2, or NULL on failure. This is the equivalent of the Python expression o1 / o2.

PyObject* PyNumber_FloorDivide(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1 除以 o2 的向下取整后的结果,如果失败,返回 NULL。等价于”传统”的整数除法。

2.2 新版功能.

PyObject* PyNumber_TrueDivide(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1 除以 o2 的一个合理的近似值,如果失败,返回 NULL。这个值是近似的是因为二进制浮点数是一个近似值,它不可能表示出以2为基数的所有实数。这个函数返回两个整数相除得到的浮点数。

2.2 新版功能.

PyObject* PyNumber_Remainder(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1 除以 o2 得到的余数,如果失败,返回 NULL。等价于Python中的表达式 o1 % o2

PyObject* PyNumber_Divmod(PyObject *o1, PyObject *o2)
Return value: New reference.

参考内置函数 divmod()。如果失败,返回 NULL。等价于Python中的表达式 divmod(o1, o2)

PyObject* PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3)
Return value: New reference.

请参阅内置函数 pow()。 如果失败,返回 NULL。 等价于 Python 中的表达式 pow(o1, o2, o3),其中 o3 是可选的。如果缺少 o3,则传入 Py_None 作为代替(如果传入 NULL 会导致非法内存访问)。

PyObject* PyNumber_Negative(PyObject *o)
Return value: New reference.

返回 o 的负值,如果失败,返回 NULL 。等价于Python中的表达式 -o

PyObject* PyNumber_Positive(PyObject *o)
Return value: New reference.

返回 o ,如果失败,返回 NULL 。等价于Python中的表达式 +o

PyObject* PyNumber_Absolute(PyObject *o)
Return value: New reference.

返回 ”o“ 的绝对值,如果失败,返回 NULL。等价于Python中的表达式 abs(o)

PyObject* PyNumber_Invert(PyObject *o)
Return value: New reference.

返回 o 的按位取反后的结果,如果失败,返回 NULL 。等价于Python中的表达式 ~o

PyObject* PyNumber_Lshift(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1 左移 o2 个比特后的结果,如果失败,返回 NULL 。等价于Python中的表达式 o1 << o2

PyObject* PyNumber_Rshift(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1 右移 o2 个比特后的结果,如果失败,返回 NULL 。等价于Python中的表达式 o1 >> o2

PyObject* PyNumber_And(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1o2 “按位与”的结果,如果失败,返回 NULL 。等价于Python中的表达式 o1 & o2

PyObject* PyNumber_Xor(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1o2 “按位异或”的结果,如果失败,返回 NULL 。等价于Python中的表达式 o1 ^ o2

PyObject* PyNumber_Or(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1o2 “按位或”的结果,如果失败,返回 NULL 。等价于Python中的表达式 o1 | o2

PyObject* PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1o2*相加的结果,如果失败,返回 *NULL 。当 o1 支持时,这个运算完成后将值赋给 o1。 等价于Python中的语句 o1 += o2

PyObject* PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1 减去 o2*的结果,如果失败,返回 *NULL 。当 o1 支持时,这个运算完成后将值赋给 o1 。 等价于Python中的语句 o1 -= o2

PyObject* PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1o2*相乘的结果,如果失败,返回 *NULL 。当 o1 支持时,这个运算完成后将值赋给 o1。 等价于Python中的语句 o1 *= o2

PyObject* PyNumber_InPlaceDivide(PyObject *o1, PyObject *o2)
Return value: New reference.

Returns the result of dividing o1 by o2, or NULL on failure. The operation is done in-place when o1 supports it. This is the equivalent of the Python statement o1 /= o2.

PyObject* PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1 除以 o2 后向下取整的结果,如果失败,返回 NULL 。当 o1 支持时,这个运算完成后将值赋给 o1。 等价于Python中的语句 o1 //= o2

2.2 新版功能.

PyObject* PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1 除以 o2 的一个合理的近似值,如果失败,返回 NULL。这个值是近似的是因为二进制浮点数是一个近似值,它不可能表示出以2为基数的所有实数。这个函数返回两个整数相除得到的浮点数。当 o1 支持时,这个运算完成后将值赋给 o1.

2.2 新版功能.

PyObject* PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1 除以 o2 得到的余数,如果失败,返回 NULL 。当 o1 支持时,这个运算完成后将值赋给 o1。 等价于Python中的语句 o1 %= o2

PyObject* PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)
Return value: New reference.

请参阅内置函数 pow()。 如果失败,返回 NULL。当 o1 支持时,这个运算完成后将值赋给 o1。等价价于 Python 中的表达式 pow(o1, o2, o3),其中 o3 是可选的。如果缺少 o3,则传入 Py_None 作为代替(如果传入 NULL 会导致非法内存访问)。如果 o3Py_None , 则该函数等价于 Python 中的语句 o1 **= o2

PyObject* PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1 左移 o2 个比特后的结果,如果失败,返回 NULL 。当 o1 支持时,这个运算完成后将值赋给 o1。 等价于Python中的语句 o1 <<= o2

PyObject* PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)
Return value: New reference.

返回 o1 右移 o2 个比特后的结果,如果失败,返回 NULL 。当 o1 支持时,这个运算完成后将值赋给 o1。 等价于Python中的语句 o1 >>= o2

PyObject* PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)
Return value: New reference.

Returns the “bitwise and” of o1 and o2 on success and NULL on failure. The operation is done in-place when o1 supports it. This is the equivalent of the Python statement o1 &= o2.

PyObject* PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)
Return value: New reference.

Returns the “bitwise exclusive or” of o1 by o2 on success, or NULL on failure. The operation is done in-place when o1 supports it. This is the equivalent of the Python statement o1 ^= o2.

PyObject* PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)
Return value: New reference.

Returns the “bitwise or” of o1 and o2 on success, or NULL on failure. The operation is done in-place when o1 supports it. This is the equivalent of the Python statement o1 |= o2.

int PyNumber_Coerce(PyObject **p1, PyObject **p2)

This function takes the addresses of two variables of type PyObject*. If the objects pointed to by *p1 and *p2 have the same type, increment their reference count and return 0 (success). If the objects can be converted to a common numeric type, replace *p1 and *p2 by their converted value (with ‘new’ reference counts), and return 0. If no conversion is possible, or if some other error occurs, return -1 (failure) and don’t increment the reference counts. The call PyNumber_Coerce(&o1, &o2) is equivalent to the Python statement o1, o2 = coerce(o1, o2).

int PyNumber_CoerceEx(PyObject **p1, PyObject **p2)

This function is similar to PyNumber_Coerce(), except that it returns 1 when the conversion is not possible and when no error is raised. Reference counts are still not increased in this case.

PyObject* PyNumber_Int(PyObject *o)
Return value: New reference.

Returns the o converted to an integer object on success, or NULL on failure. If the argument is outside the integer range a long object will be returned instead. This is the equivalent of the Python expression int(o).

PyObject* PyNumber_Long(PyObject *o)
Return value: New reference.

Returns the o converted to a long integer object on success, or NULL on failure. This is the equivalent of the Python expression long(o).

PyObject* PyNumber_Float(PyObject *o)
Return value: New reference.

返回 o 转换成浮点数类型的对象后的结果,如果失败,返回 NULL。等价于Python中的表达式 float(o)

PyObject* PyNumber_Index(PyObject *o)

Returns the o converted to a Python int or long on success or NULL with a TypeError exception raised on failure.

2.5 新版功能.

PyObject* PyNumber_ToBase(PyObject *n, int base)

Returns the integer n converted to base as a string with a base marker of '0b', '0o', or '0x' if applicable. When base is not 2, 8, 10, or 16, the format is 'x#num' where x is the base. If n is not an int object, it is converted with PyNumber_Index() first.

2.6 新版功能.

Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)

Returns o converted to a Py_ssize_t value if o can be interpreted as an integer. If o can be converted to a Python int or long but the attempt to convert to a Py_ssize_t value would raise an OverflowError, then the exc argument is the type of exception that will be raised (usually IndexError or OverflowError). If exc is NULL, then the exception is cleared and the value is clipped to PY_SSIZE_T_MIN for a negative integer or PY_SSIZE_T_MAX for a positive integer.

2.5 新版功能.

int PyIndex_Check(PyObject *o)

Returns 1 if o is an index integer (has the nb_index slot of the tp_as_number structure filled in), and 0 otherwise.

2.5 新版功能.