Number Protocol

int PyNumber_Check(PyObject *o)

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

PyObject* PyNumber_Add(PyObject *o1, PyObject *o2)
返回值:新引用。

返回在故障时添加o1o2NULL的结果。这等效于Python表达式o1 + o2

PyObject* PyNumber_Subtract(PyObject *o1, PyObject *o2)
返回值:新引用。

返回在故障时从o1中减去o2NULL的结果。这等效于Python表达式o1 - o2

PyObject* PyNumber_Multiply(PyObject *o1, PyObject *o2)
返回值:新引用。

返回失败时乘以o1o2NULL的结果。这等效于Python表达式o1 * o2

PyObject* PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2)

返回失败时o1o2NULL的矩阵乘法结果。这等效于Python表达式o1 @ o2

版本3.5中的新功能。

PyObject* PyNumber_FloorDivide(PyObject *o1, PyObject *o2)
返回值:新引用。

在故障时返回o1除以o2NULL的下限。这相当于整数的“经典”分割。

PyObject* PyNumber_TrueDivide(PyObject *o1, PyObject *o2)
返回值:新引用。

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

PyObject* PyNumber_Remainder(PyObject *o1, PyObject *o2)
返回值:新引用。

在失败时返回o1除以o2NULL的余数。这相当于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)
返回值:新引用。

在失败时返回o的绝对值,或NULL这相当于Python表达式abs(o)

PyObject* PyNumber_Invert(PyObject *o)
返回值:新引用。

成功时返回o的按位取反或失败时返回NULL这相当于Python表达式~o

PyObject* PyNumber_Lshift(PyObject *o1, PyObject *o2)
返回值:新引用。

在成功时返回向左移位o1的结果o2,或者在失败时返回NULLThis is the equivalent of the Python expression o1 << o2.

PyObject* PyNumber_Rshift(PyObject *o1, PyObject *o2)
返回值:新引用。

返回成功时右移o1的结果为o2,或失败时返回NULL这等同于Python表达式o1 &gt;&gt; o2

PyObject* PyNumber_And(PyObject *o1, PyObject *o2)
返回值:新引用。

返回失败时成功和NULLo1o2的“按位和”这相当于Python表达式o1 &amp; o2

PyObject* PyNumber_Xor(PyObject *o1, PyObject *o2)
返回值:新引用。

Returns the “bitwise exclusive or” of o1 by o2 on success, or NULL on failure. 这相当于Python表达式o1 ^ o2

PyObject* PyNumber_Or(PyObject *o1, PyObject *o2)
返回值:新引用。

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

PyObject* PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)
返回值:新引用。

返回失败时添加o1o2NULL的结果。o1支持时,操作完成in-place这相当于Python语句o1 + = o2

PyObject* PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2)
返回值:新引用。

返回在故障时从o1中减去o2NULL的结果。o1支持时,操作完成in-place这等效于Python语句o1 - = o2

PyObject* PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2)
返回值:新引用。

返回失败时乘以o1o2NULL的结果。o1支持时,操作完成in-place这相当于Python语句o1 * = o2

PyObject* PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2)

返回失败时o1o2NULL的矩阵乘法结果。o1支持时,操作完成in-place这等效于Python语句o1 @ = o2

版本3.5中的新功能。

PyObject* PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)
返回值:新引用。

在失败时返回o1除以o2NULL的数学下限。o1支持时,操作完成in-place这相当于Python语句o1 // = o2

PyObject* PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)
返回值:新引用。

在故障时为o1除以o2NULL返回一个合理的近似值。返回值是“近似”,因为二进制浮点数是近似的;不可能在基数二中表示所有实数。此函数在传递两个整数时可返回浮点值。o1支持时,操作完成in-place

PyObject* PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)
返回值:新引用。

在失败时返回o1除以o2NULL的余数。o1支持时,操作完成in-place这等效于Python语句o1 %= o2

PyObject* PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)
返回值:新引用。

参见内建函数pow()失败时返回NULLo1支持时,操作完成in-placeThis is the equivalent of the Python statement o1 **= o2 when o3 is Py_None, or an in-place variant of pow(o1, o2, o3) otherwise. 如果忽略o3,则将Py_None置于其位置(对于o3,传递NULL会导致非法内存访问)。

PyObject* PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2)
返回值:新引用。

在成功时返回向左移位o1的结果o2,或者在失败时返回NULLo1支持时,操作完成in-placeThis is the equivalent of the Python statement o1 <<= o2.

PyObject* PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)
返回值:新引用。

返回成功时右移o1的结果为o2,或失败时返回NULLo1支持时,操作完成in-place这等同于Python语句o1 &gt;&gt; = o2

PyObject* PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)
返回值:新引用。

返回失败时成功和NULLo1o2的“按位和”o1支持时,操作完成in-place这等效于Python语句o1 &amp; = o2

PyObject* PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)
返回值:新引用。

Returns the “bitwise exclusive or” of o1 by o2 on success, or NULL on failure. o1支持时,操作完成in-place这相当于Python语句o1 ^ = o2

PyObject* PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)
返回值:新引用。

成功时返回o1o2的“按位或”,或者在失败时返回NULLo1支持时,操作完成in-place这等效于Python语句o1 | = o2

PyObject* PyNumber_Long(PyObject *o)
返回值:新引用。

返回成功时转换为整数对象的o,如果失败则返回NULL这相当于Python表达式int(o)

PyObject* PyNumber_Float(PyObject *o)
返回值:新引用。

返回成功时转换为浮点对象的o,或失败时返回NULL这相当于Python表达式float(o)

PyObject* PyNumber_Index(PyObject *o)

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

PyObject* PyNumber_ToBase(PyObject *n, int base)

返回作为字符串转换为基础base的整数nbase参数必须为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)

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

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

int PyIndex_Check(PyObject *o)

如果o是索引整数(已填充tp_as_number结构的nb_index插槽),则返回True。