数字协议 — Python 文档
号码协议
- 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
。
- 返回 o1 除以 o2 的结果,失败时返回 NULL。 这相当于 Python 表达式
o1 / o2
。
- PyObject *PyNumber_FloorDivide(PyObject *o1, PyObject *o2)
返回 o1 除以 o2 的下限,或失败时返回 NULL。 这相当于整数的“经典”除法。
2.2 版中的新功能。
- PyObject *PyNumber_TrueDivide(PyObject *o1, PyObject *o2)
在失败时返回 o1 除以 o2 或 NULL 的数学值的合理近似值。 返回值是“近似值”,因为二进制浮点数是近似值; 不可能以二为底表示所有实数。 当传递两个整数时,此函数可以返回一个浮点值。
2.2 版中的新功能。
- 返回 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
。
- 返回 o1 除以 o2 的结果,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 /= o2
。
- PyObject *PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)
返回失败时将 o1 除以 o2 或 NULL 的数学底线。 当o1支持时,该操作在就地完成。 这相当于 Python 语句
o1 //= o2
。2.2 版中的新功能。
- PyObject *PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)
在失败时返回 o1 除以 o2 或 NULL 的数学值的合理近似值。 返回值是“近似值”,因为二进制浮点数是近似值; 不可能以二为底表示所有实数。 当传递两个整数时,此函数可以返回一个浮点值。 当o1支持时,该操作在就地完成。
2.2 版中的新功能。
- 返回 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
。
- 此函数采用
PyObject*
类型的两个变量的地址。 如果*p1
和*p2
指向的对象具有相同的类型,则增加它们的引用计数并返回0
(成功)。 如果对象可以转换为通用数字类型,则将*p1
和*p2
替换为其转换后的值(带有“新”引用计数),并返回0
。 如果无法进行转换,或者发生其他错误,则返回-1
(失败)并且不增加引用计数。 调用PyNumber_Coerce(&o1, &o2)
等价于 Python 语句o1, o2 = coerce(o1, o2)
。
- 此函数类似于 PyNumber_Coerce(),不同之处在于它在无法转换且未引发错误时返回
1
。 在这种情况下,引用计数仍然没有增加。
- 成功时返回 o 转换为整数对象,失败时返回 NULL。 如果参数超出整数范围,则将返回一个 long 对象。 这相当于 Python 表达式
int(o)
。
- 成功时返回 o 转换为长整数对象,失败时返回 NULL。 这相当于 Python 表达式
long(o)
。
- 成功时返回 o 转换为浮点对象,失败时返回 NULL。 这相当于 Python 表达式
float(o)
。
- PyObject *PyNumber_Index(PyObject *o)
返回转换为 Python int 或 long 的 o 成功或 NULL 失败时引发
TypeError
异常。2.5 版中的新功能。
- PyObject *PyNumber_ToBase(PyObject *n, int base)
返回整数 n 转换为 base 作为一个字符串,基本标记为
'0b'
、'0o'
或'0x'
(如果适用) . 当 base 不是 2、8、10 或 16 时,格式为'x#num'
,其中 x 是基数。 如果 n 不是 int 对象,则首先使用 PyNumber_Index() 进行转换。2.6 版中的新功能。
- Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)
如果 o 可以解释为整数,则返回 o 转换为 Py_ssize_t 值。 如果 o 可以转换为 Python int 或 long 但尝试转换为 Py_ssize_t 值会引发
OverflowError
,则 exc 参数是将引发的异常(通常为IndexError
或OverflowError
)。 如果 exc 为 NULL,则清除异常并将值剪裁为 PY_SSIZE_T_MIN 表示负整数或 PY_SSIZE_T_MAX 表示正整数整数。2.5 版中的新功能。
- int PyIndex_Check(PyObject *o)
如果 o 是索引整数(填充了 tp_as_number 结构的 nb_index 槽),则返回
1
,否则返回0
。2.5 版中的新功能。