Number Protocol

  • int PyNumber_Check(PyObject ** o *)
    • 如果对象* o *提供数字协议,则返回1,否则返回 false。此Function始终成功。

在 3.8 版中进行了更改:如果* o *是一个索引整数,则返回1

返回添加* o1 o2 *的结果,如果失败则返回NULL。这等效于 Python 表达式o1 + o2

返回从* o1 减去 o2 *的结果,如果失败则返回NULL。这等效于 Python 表达式o1 - o2

返回将* o1 o2 *相乘的结果,如果失败则返回NULL。这等效于 Python 表达式o1 * o2

返回* o1 o2 *上矩阵乘法的结果,失败则返回NULL。这等效于 Python 表达式o1 @ o2

3.5 版中的新Function。

返回* o1 的下限除以 o2 *或失败时的NULL。这等效于整数的“经典”除法。

返回* o1 的 math 值除以 o2 *或NULL的合理近似值。因为二进制浮点数是近似值,所以返回值是“ approximate”。不可能以二为底表示所有实数。传递两个整数时,此函数可以返回浮点值。

返回* o1 除以 o2 *的余数,如果失败则返回NULL。这等效于 Python 表达式o1 % o2

请参阅内置Functiondivmod()。失败时返回NULL。这等效于 Python 表达式divmod(o1, o2)

请参阅内置Functionpow()。失败时返回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

3.5 版中的新Function。

返回将* o1 除以 o2 或失败时的NULL的 math 底线。如果 o1 *支持,则操作就地完成。这等效于 Python 语句o1 //= o2

返回* o1 的 math 值除以 o2 NULL的合理近似值。因为二进制浮点数是近似值,所以返回值是“ approximate”。不可能以二为底表示所有实数。传递两个整数时,此函数可以返回浮点值。如果 o1 *支持,则操作就地完成。

返回* o1 除以 o2 的余数,如果失败则返回NULL。如果 o1 *支持,则操作就地完成。这等效于 Python 语句o1 %= o2

请参阅内置Functionpow()。失败时返回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)

返回成功时转换为 float 对象的* o *,失败则返回NULL。这等效于 Python 表达式float(o)

返回* o *成功转换为 Python int 或NULL,失败则引发TypeError异常。

  • PyObject * PyNumber_ToBase(PyObject ** n *,int * base *)
    • 返回值:新参考.

返回整数* 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 *)
    • 如果* o 可以解释为整数,则返回 o *转换为 Py_ssize_t 值。如果呼叫失败,则会引发异常并返回-1

如果* o 可以转换为 Python int,但try转换为 Py_ssize_t 值将引发OverflowError,则 exc 参数是将引发的异常类型(通常为IndexErrorOverflowError)。如果 exc *是NULL,则清除异常,并将值剪切为PY_SSIZE_T_MIN(对于负整数)或PY_SSIZE_T_MAX(对于正整数)。

  • int PyIndex_Check(PyObject ** o *)
    • 如果* o *是一个索引整数(已填充 tp_as_number 结构的 nb_index 插槽),则返回1,否则返回0。此Function始终成功。