On this page
Integer Objects
所有整数都实现为任意大小的“长”整数对象。
错误时,大多数PyLong_As*
API 返回(return type)-1
,无法将其与数字区分开。使用PyErr_Occurred()消除歧义。
PyLongObject
- PyObject的子类型表示 Python 整数对象。
PyTypeObject
PyLong_Type
- PyTypeObject的此实例表示 Python 整数类型。该对象与 Python 层中的int相同。
int
PyLong_Check
(PyObject ** p *)- 如果其参数是PyLongObject或PyLongObject的子类型,则返回 true。
int
PyLong_CheckExact
(PyObject ** p *)- 如果其参数是PyLongObject,而不是PyLongObject的子类型,则返回 true。
PyObject *
PyLong_FromLong
(长* v *)- 返回值:新参考.
从* v *返回一个新的PyLongObject对象,如果失败则返回NULL
。
当前的实现为-5
和256
之间的所有整数保留一个整数对象数组,当您在该范围内创建 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
,则它必须介于2
和36
之间(包括_)。在基本说明符之后和数字之间的前导空格和单个下划线将被忽略。如果没有数字,将加ValueError。
- PyObject *
PyLong_FromUnicode
(Py_UNICODE ** u *,Py_ssize_t * length *,int * base *)- 返回值:新参考.
将 Unicode 数字序列转换为 Python 整数值。
从版本 3.3 开始不推荐使用,将在版本 3.10 中删除:老式Py_UNICODE API 的一部分;请迁移到使用PyLong_FromUnicodeObject()。
将字符串* u *中的 Unicode 数字序列转换为 Python 整数值。
版本 3.3 中的新Function。
- PyObject *
PyLong_FromVoidPtr
(void ** p *)- 返回值:新参考.
从指针* p *创建一个 Python 整数。可以使用PyLong_AsVoidPtr()从结果值中检索指针值。
- 长
PyLong_AsLong
(PyObject ** obj *)- 返回* obj 的 C
long
表示形式。如果 obj *不是PyLongObject的实例,请首先调用其index()或int()方法(如果存在)以将其转换为PyLongObject。
- 返回* obj 的 C
如果* obj *的值超出long
的范围,则提高OverflowError。
错误返回-1
。使用PyErr_Occurred()消除歧义。
在 3.8 版中进行了更改:如果可用,请使用index()。
从 3.8 版开始不推荐使用:不建议使用int()。
- long
PyLong_AsLongAndOverflow
(PyObject *obj ,int overflow *)- 返回* obj 的 C
long
表示形式。如果 obj *不是PyLongObject的实例,请首先调用其index()或int()方法(如果存在)以将其转换为PyLongObject。
- 返回* obj 的 C
如果* obj *的值大于LONG_MAX
或小于LONG_MIN
,则分别将 overflow 设置为1
或-1
,并返回-1
;否则,将 overflow 设置为0
。如果发生任何其他异常,将 overflow *设置为0
并照常返回-1
。
错误返回-1
。使用PyErr_Occurred()消除歧义。
在 3.8 版中进行了更改:如果可用,请使用index()。
从 3.8 版开始不推荐使用:不建议使用int()。
- 长长
PyLong_AsLongLong
(PyObject ** obj *)- 返回* obj 的 C
long long
表示形式。如果 obj *不是PyLongObject的实例,请首先调用其index()或int()方法(如果存在)以将其转换为PyLongObject。
- 返回* obj 的 C
如果* obj *的值超出long long
的范围,则提高OverflowError。
错误返回-1
。使用PyErr_Occurred()消除歧义。
在 3.8 版中进行了更改:如果可用,请使用index()。
从 3.8 版开始不推荐使用:不建议使用int()。
- long long
PyLong_AsLongLongAndOverflow
(PyObject *obj ,int overflow *)- 返回* obj 的 C
long long
表示形式。如果 obj *不是PyLongObject的实例,请首先调用其index()或int()方法(如果存在)以将其转换为PyLongObject。
- 返回* obj 的 C
如果* 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 *的 C
如果* pylong *的值超出Py_ssize_t
的范围,则提高OverflowError。
错误返回-1
。使用PyErr_Occurred()消除歧义。
- 无符号长
PyLong_AsUnsignedLong
(PyObject ** pylong *)- 返回* pylong *的 C
unsigned long
表示形式。 * pylong *必须是PyLongObject的实例。
- 返回* pylong *的 C
如果* pylong *的值超出unsigned long
的范围,则提高OverflowError。
错误返回(unsigned long)-1
。使用PyErr_Occurred()消除歧义。
- size_t
PyLong_AsSize_t
(PyObject ** pylong *)- 返回* pylong *的 C
size_t
表示形式。 * pylong *必须是PyLongObject的实例。
- 返回* pylong *的 C
如果* pylong *的值超出size_t
的范围,则提高OverflowError。
错误返回(size_t)-1
。使用PyErr_Occurred()消除歧义。
- unsigned long long
PyLong_AsUnsignedLongLong
(PyObject ** pylong *)- 返回* pylong *的 C
unsigned long long
表示形式。 * pylong *必须是PyLongObject的实例。
- 返回* pylong *的 C
如果* pylong *的值超出unsigned long long
的范围,请提高OverflowError。
错误返回(unsigned long long)-1
。使用PyErr_Occurred()消除歧义。
在版本 3.1 中进行了更改:现在,负* pylong *会引发OverflowError而不是TypeError。
- 无符号长
PyLong_AsUnsignedLongMask
(PyObject ** obj *)- 返回* obj 的 C
unsigned long
表示形式。如果 obj *不是PyLongObject的实例,请首先调用其index()或int()方法(如果存在)以将其转换为PyLongObject。
- 返回* obj 的 C
如果* 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 的 C
如果* 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 *的 C
如果* pylong *的值超出double
的范围,则提高OverflowError。
错误返回-1.0
。使用PyErr_Occurred()消除歧义。
- 无效*
PyLong_AsVoidPtr
(PyObject ** pylong *)- 将 Python 整数* pylong 转换为 C
void
指针。如果 pylong *无法转换,则会引发OverflowError。仅保证为使用PyLong_FromVoidPtr()创建的值生成可用的void
指针。
- 将 Python 整数* pylong 转换为 C
错误返回NULL
。使用PyErr_Occurred()消除歧义。