数字协议 — Python 文档
来自菜鸟教程
Python/docs/3.6/c-api/number
号码协议
- int PyNumber_Check(PyObject *o)
- 如果对象 o 提供数字协议,则返回
1
,否则返回 false。 此功能总是成功。
- 返回添加 o1 和 o2 的结果,或失败时返回 NULL。 这相当于 Python 表达式
o1 + o2
。
- 返回从 o1 中减去 o2 的结果,或失败时返回 NULL。 这相当于 Python 表达式
o1 - o2
。
- 返回乘以 o1 和 o2 的结果,或失败时返回 NULL。 这相当于 Python 表达式
o1 * o2
。
- PyObject *PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2)
在失败时返回 o1 和 o2 或 NULL 上矩阵乘法的结果。 这相当于 Python 表达式
o1 @ o2
。3.5 版中的新功能。
- 返回 o1 除以 o2 的下限,或失败时返回 NULL。 这相当于整数的“经典”除法。
- 在失败时返回 o1 除以 o2 或 NULL 的数学值的合理近似值。 返回值是“近似值”,因为二进制浮点数是近似值; 不可能以二为底表示所有实数。 当传递两个整数时,此函数可以返回一个浮点值。
- 返回 o1 除以 o2 的余数,或失败时返回 NULL。 这相当于 Python 表达式
o1 % o2
。
- 请参阅内置函数 divmod()。 失败时返回 NULL。 这相当于 Python 表达式
divmod(o1, o2)
。
- 见内置函数pow()。 失败时返回 NULL。 这相当于 Python 表达式
pow(o1, o2, o3)
,其中 o3 是可选的。 如果要忽略 o3,则在其位置传递 Py_None(为 o3 传递 NULL 会导致非法内存访问)。
- 成功时返回 o 的否定,失败时返回 NULL。 这相当于 Python 表达式
-o
。
- 成功时返回 o,失败时返回 NULL。 这相当于 Python 表达式
+o
。
- 失败时返回 o 或 NULL 的绝对值。 这相当于 Python 表达式
abs(o)
。
- 成功时返回 o 的按位否定,失败时返回 NULL。 这相当于 Python 表达式
~o
。
- 成功时返回 o1 左移 o2 的结果,失败时返回 NULL。 这相当于 Python 表达式
o1 << o2
。
- 成功返回 o1 右移 o2 的结果,失败返回 NULL。 这相当于 Python 表达式
o1 >> o2
。
- 成功时返回 o1 和 o2 的“按位与”,失败时返回 NULL。 这相当于 Python 表达式
o1 & o2
。
- 成功时返回 o1 的“按位异或”通过 o2,失败时返回 NULL。 这相当于 Python 表达式
o1 ^ o2
。
- 成功时返回 o1 和 o2 的“按位或”,失败时返回 NULL。 这相当于 Python 表达式
o1 | o2
。
- 返回添加 o1 和 o2 的结果,或失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 += o2
。
- 返回从 o1 中减去 o2 的结果,或失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 -= o2
。
- 返回乘以 o1 和 o2 的结果,或失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 *= o2
。
- PyObject *PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2)
在失败时返回 o1 和 o2 或 NULL 上矩阵乘法的结果。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 @= o2
。3.5 版中的新功能。
- 返回失败时将 o1 除以 o2 或 NULL 的数学底线。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 //= o2
。
- 在失败时返回 o1 除以 o2 或 NULL 的数学值的合理近似值。 返回值是“近似值”,因为二进制浮点数是近似值; 不可能以二为底表示所有实数。 当传递两个整数时,此函数可以返回一个浮点值。 当o1支持时,该操作在就地完成。
- 返回 o1 除以 o2 的余数,或失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 %= o2
。
- 见内置函数pow()。 失败时返回 NULL。 当o1支持时,该操作在就地完成。 当 o3 为 Py_None 时,这等效于 Python 语句
o1 **= o2
,否则为pow(o1, o2, o3)
的就地变体。 如果要忽略 o3,则在其位置传递 Py_None(为 o3 传递 NULL 会导致非法内存访问)。
- 成功时返回 o1 左移 o2 的结果,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 <<= o2
。
- 成功返回 o1 右移 o2 的结果,失败返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 >>= o2
。
- 成功时返回 o1 和 o2 的“按位与”,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 &= o2
。
- 成功时返回 o1 的“按位异或”通过 o2,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 ^= o2
。
- 成功时返回 o1 和 o2 的“按位或”,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 |= o2
。
- 成功时返回 o 转换为整数对象,失败时返回 NULL。 这相当于 Python 表达式
int(o)
。
- 成功时返回 o 转换为浮点对象,失败时返回 NULL。 这相当于 Python 表达式
float(o)
。
- 返回成功时转换为 Python int 的 o 或失败时引发 NULL 的 TypeError 异常。
- 以字符串形式返回转换为基数 基数 的整数 n。 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)
如果 o 可以解释为整数,则返回 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 表示正整数整数。
- int PyIndex_Check(PyObject *o)
- 如果 o 是索引整数(填充了 tp_as_number 结构的 nb_index 槽),则返回
1
,否则返回0
。 此功能总是成功。