数字协议 — Python 文档
来自菜鸟教程
Python/docs/3.7/c-api/number
号码协议
- int PyNumber_Check(PyObject *o)
- 如果对象 o 提供数字协议,则返回
1
,否则返回 false。 此功能总是成功。
- 返回将 o1 和 o2 或
NULL
相加失败的结果。 这相当于 Python 表达式o1 + o2
。
- 返回失败时从 o1 或
NULL
减去 o2 的结果。 这相当于 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(将NULL
传递给 o3 会导致非法内存访问)。
- 成功时返回 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 或
NULL
减去 o2 的结果。 当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(将NULL
传递给 o3 会导致非法内存访问)。
- 成功时返回 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 或失败时引发 TypeError 异常的
NULL
。
- 以字符串形式返回转换为基数 基数 的整数 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
。 此功能总是成功。