數(shù)字協(xié)議?

int PyNumber_Check(PyObject?*o)?

如果對象 o 提供數(shù)字的協(xié)議,返回真 1,否則返回假。這個函數(shù)不會調(diào)用失敗。

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

返回 o1 、o2 相加的結(jié)果,如果失敗,返回 NULL 。等價于 Python 中的表達(dá)式 o1 + o2 。

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

返回 o1 減去 o2 的結(jié)果,如果失敗,返回 NULL 。等價于Python中的表達(dá)式 o1 - o2 。

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

返回 o1o2 相乘的結(jié)果,如果失敗,返回 NULL。等價于Python中的表達(dá)式 o1 * o2

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

返回 o1 、o2 做矩陣乘法的結(jié)果,如果失敗,返回 NULL。等價于Python中的表達(dá)式 o1 @ o2。

3.5 新版功能.

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

返回 o1 除以 o2 的向下取整后的結(jié)果,如果失敗,返回 NULL。等價于“傳統(tǒng)”的整數(shù)除法。

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

返回 o1 除以 o2 的一個合理的近似值,如果失敗,返回 NULL。這個值是近似的,因?yàn)槎M(jìn)制浮點(diǎn)數(shù)是一個近似值,它不可能表示出以2為基數(shù)的所有實(shí)數(shù)。這個函數(shù)返回兩個整數(shù)相除得到的浮點(diǎn)數(shù)。

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

返回 o1 除以 o2 得到的余數(shù),如果失敗,返回 NULL。等價于Python中的表達(dá)式 o1 % o2。

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

參考內(nèi)置函數(shù) divmod()。如果失敗,返回 NULL。等價于Python表達(dá)式 divmod(o1, o2)。

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

請參閱內(nèi)置函數(shù) pow()。 如果失敗,返回 NULL。 等價于 Python 中的表達(dá)式 pow(o1, o2, o3),其中 o3 是可選的。如果要忽略 o3,則需傳入 Py_None 作為代替(如果傳入 NULL 會導(dǎo)致非法內(nèi)存訪問)。

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

返回 o 的負(fù)值,如果失敗,返回 NULL 。等價于 Python 表達(dá)式 -o。

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

返回 o,如果失敗,返回 NULL 。等價于 Python 表達(dá)式 +o。

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

返回 o 的絕對值,如果失敗,返回 NULL。等價于 Python 表達(dá)式 abs(o)。

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

返回 o 的按位取反后的結(jié)果,如果失敗,返回 NULL。等價于 Python 表達(dá)式 ~o。

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

返回 o1 左移 o2 個比特后的結(jié)果,如果失敗,返回 NULL。等價于 Python 表達(dá)式 o1 << o2。

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

返回 o1 右移 o2 個比特后的結(jié)果,如果失敗,返回 NULL 。等價于 Python 表達(dá)式 o1 >> o2。

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

返回 o1o2 “按位與”的結(jié)果,如果失敗,返回 NULL 。等價于 Python 表達(dá)式 o1 & o2。

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

返回 o1o2 “按位異或”的結(jié)果,如果失敗,返回 NULL 。等價于Python中的表達(dá)式 o1 ^o2。

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

返回 o1o2 “按位或”的結(jié)果,如果失敗,返回 NULL 。等價于 Python 表達(dá)式 o1 | o2

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

返回 o1 、o2 相加的結(jié)果,如果失敗,返回 NULL 。當(dāng) o1 支持時,這個操作直接將值賦給 o1。 等價于 Python 語句 o1 + o2

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

返回 o1 、o2 相減的結(jié)果,如果失敗,返回 NULL 。當(dāng) o1 支持時,這個運(yùn)算完成后將值賦給 o1 。 等價于 Python語句 o1 -= o2。

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

返回 o1 、o2*相乘的結(jié)果,如果失敗,返回 ``NULL`` 。當(dāng) *o1 支持時,這個運(yùn)算完成后將值賦給 o1。 等價于 Python 語句 o1 += o2。

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

返回 o1 、o2 做矩陣乘法后的結(jié)果,如果失敗,返回 NULL 。當(dāng) o1 支持時,這個運(yùn)算完成后將值賦給 o1。 等價于 Python 語句 o1 @= o2。

3.5 新版功能.

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

返回 o1 除以 o2 后向下取整的結(jié)果,如果失敗,返回 NULL。當(dāng) o1 支持時,這個運(yùn)算完成后將值賦給 o1。 等價于 Python 語句 o1 //= o2。

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

返回 o1 除以 o2 的一個合理的近似值,如果失敗,返回 NULL。這個值是近似的,因?yàn)槎M(jìn)制浮點(diǎn)數(shù)是一個近似值,不可能以2為基數(shù)來表示出所有實(shí)數(shù)。這個函數(shù)返回兩個整數(shù)相除得到的浮點(diǎn)數(shù)。當(dāng) o1 支持時,這個運(yùn)算完成后將值賦給 o1。

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

返回 o1 除以 o2 得到的余數(shù),如果失敗,返回 NULL。當(dāng) o1 支持時,這個運(yùn)算直接使用它儲存結(jié)果。 等價于 Python 語句 o1 %= o2。

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

請參閱內(nèi)置函數(shù) pow()。 如果失敗,返回 NULL。當(dāng) o1 支持時,這個運(yùn)算直接使用它儲存結(jié)果。當(dāng) o3Py_None 時,等價于 Python 語句 o1 **= o2;否則等價于在原來位置儲存結(jié)果的 pow(o1, o2, o3) 。如果要忽略 o3,則需傳入 Py_None (傳入 NULL 會導(dǎo)致非法內(nèi)存訪問)。

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

返回 o1 左移 o2 個比特后的結(jié)果,如果失敗,返回 NULL。當(dāng) o1 支持時,這個運(yùn)算直接使用它儲存結(jié)果。 等價于 Python 語句 o1 <<= o2

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

返回 o1 右移 o2 個比特后的結(jié)果,如果失敗,返回 NULL。當(dāng) o1 支持時,這個運(yùn)算直接使用它儲存結(jié)果。 等價于 Python 語句 o1 >>= o2

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

成功時返回 o1o2 "按位與" 的結(jié)果,失敗時返回 NULL。 在 o1 支持的前提下該操作將 原地 執(zhí)行。 等價與 Python 語句 o1 &= o2。

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

成功時返回 o1o2 "按位異或的結(jié)果,失敗時返回 NULL。 在 o1 支持的前提下該操作將 原地 執(zhí)行。 等價與 Python 語句 o1 ^= o2。

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

成功時返回 o1o2 "按位或" 的結(jié)果,失敗時返回 NULL。 在 o1 支持的前提下該操作將 原地 執(zhí)行。 等價于 Python 語句 o1 |= o2

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

成功時返回 o 換為整數(shù)對象或的結(jié)果,失敗時返回 NULL。 等價于 Python 表達(dá)式 int(o)

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

成功時返回 o 轉(zhuǎn)換為浮點(diǎn)對象后的結(jié)果,失敗時返回 NULL。 等價于 Python 表達(dá)式 float(o)。

PyObject* PyNumber_Index(PyObject?*o)?
Return value: New reference.

成功時返回 o 轉(zhuǎn)換為 Python int 類型后的結(jié)果,失敗時返回 NULL 并引發(fā) TypeError 異常。

PyObject* PyNumber_ToBase(PyObject?*n, int?base)?
Return value: New reference.

返回整數(shù) n 轉(zhuǎn)換成以 base 為基數(shù)的字符串后的結(jié)果。這個 base 參數(shù)必須是 2,8,10 或者 16 。對于基數(shù) 2,8,或 16 ,返回的字符串將分別加上基數(shù)標(biāo)識 '0b', '0o', or '0x'。如果 n 不是 Python 中的整數(shù) int 類型,就先通過 PyNumber_Index() 將它轉(zhuǎn)換成整數(shù)類型。

Py_ssize_t PyNumber_AsSsize_t(PyObject?*o, PyObject?*exc)?

如果 o 是一個整數(shù)類型的解釋型,返回 o 轉(zhuǎn)換成一個 Py_ssize_t 值項后的結(jié)果。如果調(diào)用失敗,返回 -1 并引發(fā)異常。

如果 o 可以被轉(zhuǎn)換為 Python int 類型但嘗試轉(zhuǎn)換為 Py_ssize_t 值則會引發(fā) OverflowError,這時 exc 參數(shù)為將被引發(fā)的異常類型 (通常是 IndexErrorOverflowError)。 如果 excNULL,則異常會被清除并且值會被剪切到負(fù)整數(shù) PY_SSIZE_T_MIN 或正整數(shù) PY_SSIZE_T_MAX。

int PyIndex_Check(PyObject?*o)?

如果 o 是一個索引整數(shù)(存有 nb_index 位置并有 tp_as_number 填入其中)則返回 1,否則返回 0 。這個函數(shù)不會調(diào)用失敗。