數字協議¶
-
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 的一部分。
成功時返回 o1 和 o2 的“按位與”結果,失敗時返回
NULL
。這等同於 Python 表示式o1 & o2
。
-
PyObject *PyNumber_Xor(PyObject *o1, PyObject *o2)¶
- 返回值: 新引用。 穩定ABI 的一部分。
成功時返回 o1 和 o2 的“按位異或”結果,失敗時返回
NULL
。這等同於 Python 表示式o1 ^ o2
。
-
PyObject *PyNumber_Or(PyObject *o1, PyObject *o2)¶
- 返回值: 新引用。 穩定ABI 的一部分。
成功時返回 o1 和 o2 的“按位或”結果,失敗時返回
NULL
。這等同於 Python 表示式o1 | o2
。
-
PyObject *PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)¶
- 返回值: 新引用。 穩定ABI 的一部分。
返回 o1 和 o2 相加的結果,失敗時返回
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 的一部分。
返回 o1 和 o2 相乘的結果,失敗時返回
NULL
。如果 o1 支援就地操作,則進行就地操作。這等同於 Python 語句o1 *= o2
。
-
PyObject *PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2)¶
- 返回值: 新引用。 自 3.7 版本起成為 穩定ABI 的一部分。
返回 o1 和 o2 矩陣相乘的結果,失敗時返回
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 的一部分。
成功時返回 o1 和 o2 的“按位與”結果,失敗時返回
NULL
。如果 o1 支援就地操作,則進行就地操作。這等同於 Python 語句o1 &= o2
。
-
PyObject *PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)¶
- 返回值: 新引用。 穩定ABI 的一部分。
成功時返回 o1 和 o2 的“按位異或”結果,失敗時返回
NULL
。如果 o1 支援就地操作,則進行就地操作。這等同於 Python 語句o1 ^= o2
。
-
PyObject *PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)¶
- 返回值: 新引用。 穩定ABI 的一部分。
成功時返回 o1 和 o2 的“按位或”結果,失敗時返回
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 引數將是要引發的異常型別(通常是IndexError
或OverflowError
)。如果 exc 是NULL
,則清除異常,並且對於負整數,該值被截斷為PY_SSIZE_T_MIN
,對於正整數,則被截斷為PY_SSIZE_T_MAX
。