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