Integer Objects

所有整数都实现为任意大小的“长”整数对象。

错误时,大多数PyLong_As* API 返回(return type)-1,无法将其与数字区分开。使用PyErr_Occurred()消除歧义。

从* v *返回一个新的PyLongObject对象,如果失败则返回NULL

当前的实现为-5256之间的所有整数保留一个整数对象数组,当您在该范围内创建 int 时,实际上实际上是返回对现有对象的引用。因此应该可以更改1的值。我怀疑在这种情况下,Python 的行为是不确定的。 :-)

  • PyObject * PyLong_FromUnsignedLong(无符号长* v *)
    • 返回值:新参考.

从 C unsigned long返回一个新的PyLongObject对象,如果失败则返回NULL

  • PyObject * PyLong_FromSsize_t(Py_ssize_t * v *)
    • 返回值:新参考.

从 C Py_ssize_t返回一个新的PyLongObject对象,如果失败则返回NULL

  • PyObject * PyLong_FromSize_t(size_t * v *)
    • 返回值:新参考.

从 C size_t返回一个新的PyLongObject对象,如果失败则返回NULL

  • PyObject * PyLong_FromLongLong(长长* v *)
    • 返回值:新参考.

从 C long long返回一个新的PyLongObject对象,如果失败则返回NULL

  • PyObject * PyLong_FromUnsignedLongLong(unsigned long long * v *)
    • 返回值:新参考.

从 C unsigned long long返回一个新的PyLongObject对象,如果失败则返回NULL

  • PyObject * PyLong_FromDouble(双* v *)
    • 返回值:新参考.

从* v *的整数部分返回一个新的PyLongObject对象,如果失败则返回NULL

  • PyObject * PyLong_FromString(const char *str ,char * pend *,int * base *)
    • 返回值:新参考.

根据* str 中的字符串值返回一个新的PyLongObject,该字符串值根据 base 中的基数进行解释。如果 pend 不是NULL,则* pend 将指向 str 中的第一个字符,该字符紧随数字的表示。如果 base 0,则使用Integer literals定义解释 str ;在这种情况下,非零十进制数字中的前导零会引发ValueError。如果 base *不是0,则它必须介于236之间(包括_)。在基本说明符之后和数字之间的前导空格和单个下划线将被忽略。如果没有数字,将加ValueError

  • PyObject * PyLong_FromUnicode(Py_UNICODE ** u *,Py_ssize_t * length *,int * base *)
    • 返回值:新参考.

将 Unicode 数字序列转换为 Python 整数值。

从版本 3.3 开始不推荐使用,将在版本 3.10 中删除:老式Py_UNICODE API 的一部分;请迁移到使用PyLong_FromUnicodeObject()

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

将字符串* u *中的 Unicode 数字序列转换为 Python 整数值。

版本 3.3 中的新Function。

  • PyObject * PyLong_FromVoidPtr(void ** p *)
    • 返回值:新参考.

从指针* p *创建一个 Python 整数。可以使用PyLong_AsVoidPtr()从结果值中检索指针值。

如果* obj *的值超出long的范围,则提高OverflowError

错误返回-1。使用PyErr_Occurred()消除歧义。

在 3.8 版中进行了更改:如果可用,请使用index()

从 3.8 版开始不推荐使用:不建议使用int()

  • long PyLong_AsLongAndOverflow(PyObject *obj ,int overflow *)

如果* obj *的值大于LONG_MAX或小于LONG_MIN,则分别将 overflow 设置为1-1,并返回-1;否则,将 overflow 设置为0。如果发生任何其他异常,将 overflow *设置为0并照常返回-1

错误返回-1。使用PyErr_Occurred()消除歧义。

在 3.8 版中进行了更改:如果可用,请使用index()

从 3.8 版开始不推荐使用:不建议使用int()

如果* obj *的值超出long long的范围,则提高OverflowError

错误返回-1。使用PyErr_Occurred()消除歧义。

在 3.8 版中进行了更改:如果可用,请使用index()

从 3.8 版开始不推荐使用:不建议使用int()

  • long long PyLong_AsLongLongAndOverflow(PyObject *obj ,int overflow *)

如果* obj *的值大于PY_LLONG_MAX或小于PY_LLONG_MIN,则分别将 overflow 设置为1-1,并返回-1;否则,将 overflow 设置为0。如果发生任何其他异常,将 overflow *设置为0并照常返回-1

错误返回-1。使用PyErr_Occurred()消除歧义。

3.2 版中的新Function。

在 3.8 版中进行了更改:如果可用,请使用index()

从 3.8 版开始不推荐使用:不建议使用int()

  • Py_ssize_t PyLong_AsSsize_t(PyObject ** pylong *)
    • 返回* pylong *的 C Py_ssize_t表示形式。 * pylong *必须是PyLongObject的实例。

如果* pylong *的值超出Py_ssize_t的范围,则提高OverflowError

错误返回-1。使用PyErr_Occurred()消除歧义。

  • 无符号长PyLong_AsUnsignedLong(PyObject ** pylong *)
    • 返回* pylong *的 C unsigned long表示形式。 * pylong *必须是PyLongObject的实例。

如果* pylong *的值超出unsigned long的范围,则提高OverflowError

错误返回(unsigned long)-1。使用PyErr_Occurred()消除歧义。

  • size_t PyLong_AsSize_t(PyObject ** pylong *)
    • 返回* pylong *的 C size_t表示形式。 * pylong *必须是PyLongObject的实例。

如果* pylong *的值超出size_t的范围,则提高OverflowError

错误返回(size_t)-1。使用PyErr_Occurred()消除歧义。

  • unsigned long long PyLong_AsUnsignedLongLong(PyObject ** pylong *)
    • 返回* pylong *的 C unsigned long long表示形式。 * pylong *必须是PyLongObject的实例。

如果* pylong *的值超出unsigned long long的范围,请提高OverflowError

错误返回(unsigned long long)-1。使用PyErr_Occurred()消除歧义。

在版本 3.1 中进行了更改:现在,负* pylong *会引发OverflowError而不是TypeError

  • 无符号长PyLong_AsUnsignedLongMask(PyObject ** obj *)

如果* obj *的值超出unsigned long的范围,则以ULONG_MAX + 1为模返回该值的减少量。

错误返回(unsigned long)-1。使用PyErr_Occurred()消除歧义。

在 3.8 版中进行了更改:如果可用,请使用index()

从 3.8 版开始不推荐使用:不建议使用int()

  • unsigned long long PyLong_AsUnsignedLongLongMask(PyObject ** obj *)
    • 返回* obj 的 C unsigned long long表示形式。如果 obj *不是PyLongObject的实例,请首先调用其index()int()方法(如果存在)以将其转换为PyLongObject

如果* obj *的值超出unsigned long long的范围,则以PY_ULLONG_MAX + 1为模返回该值的减少量。

错误返回(unsigned long long)-1。使用PyErr_Occurred()消除歧义。

在 3.8 版中进行了更改:如果可用,请使用index()

从 3.8 版开始不推荐使用:不建议使用int()

  • PyLong_AsDouble(PyObject ** pylong *)
    • 返回* pylong *的 C double表示形式。 * pylong *必须是PyLongObject的实例。

如果* pylong *的值超出double的范围,则提高OverflowError

错误返回-1.0。使用PyErr_Occurred()消除歧义。

  • 无效* PyLong_AsVoidPtr(PyObject ** pylong *)
    • 将 Python 整数* pylong 转换为 C void指针。如果 pylong *无法转换,则会引发OverflowError。仅保证为使用PyLong_FromVoidPtr()创建的值生成可用的void指针。

错误返回NULL。使用PyErr_Occurred()消除歧义。