整数型对象¶
所有整数都实现为长度任意的长整数对象。
在出错时,大多数 PyLong_As*
API 都会返回 (return type)-1
,这与数字无法区分开。请采用 PyErr_Occurred()
来加以区分。
-
type
PyLongObject
¶ - Part of the Limited API (as an opaque struct).
表示 Python 整数对象的
PyObject
子类型。
-
PyTypeObject
PyLong_Type
¶ - Part of the Stable ABI.
这个
PyTypeObject
的实例表示 Python 的整数类型。与 Python 语言中的int
相同。
-
int
PyLong_Check
(PyObject *p)¶ 如果参数是
PyLongObject
或PyLongObject
的子类型,则返回 True。该函数一定能够执行成功。
-
int
PyLong_CheckExact
(PyObject *p)¶ 如果其参数属于
PyLongObject
,但不是PyLongObject
的子类型则返回真值。 此函数总是会成功执行。
-
PyObject *
PyLong_FromLong
(long v)¶ - Return value: New reference. Part of the Stable ABI.
由 v 返回一个新的
PyLongObject
对象,失败时返回NULL
。当前的实现维护着一个整数对象数组,包含
-5
和256
之间的所有整数对象。 若创建一个位于该区间的 int 时,实际得到的将是对已有对象的引用。
-
PyObject *
PyLong_FromUnsignedLong
(unsigned long v)¶ - Return value: New reference. Part of the Stable ABI.
Return a new
PyLongObject
object from a Cunsigned long
, orNULL
on failure.
-
PyObject *
PyLong_FromSsize_t
(Py_ssize_t v)¶ - Return value: New reference. Part of the Stable ABI.
由 C
Py_ssize_t
返回一个新的PyLongObject
对象,失败时返回NULL
。
-
PyObject *
PyLong_FromSize_t
(size_t v)¶ - Return value: New reference. Part of the Stable ABI.
由 C
size_t
返回一个新的PyLongObject
对象,失败则返回NULL
。
-
PyObject *
PyLong_FromLongLong
(long long v)¶ - Return value: New reference. Part of the Stable ABI.
Return a new
PyLongObject
object from a Clong long
, orNULL
on failure.
-
PyObject *
PyLong_FromUnsignedLongLong
(unsigned long long v)¶ - Return value: New reference. Part of the Stable ABI.
Return a new
PyLongObject
object from a Cunsigned long long
, orNULL
on failure.
-
PyObject *
PyLong_FromDouble
(double v)¶ - Return value: New reference. Part of the Stable ABI.
由 v 的整数部分返回一个新的
PyLongObject
对象,失败则返回NULL
。
-
PyObject *
PyLong_FromString
(const char *str, char **pend, int base)¶ - Return value: New reference. Part of the Stable ABI.
根据 str 字符串值返回一个新的
PyLongObject
,base 指定了整数的基。如果 pend 不为NULL
,则 /*pend 将指向 str 中表示数字部分后面的第一个字符。如果 base 为0
, str 将采用 整数字面值 的定义进行解释;这时非零十进制数的前导零会触发ValueError
。如果 base 不为0
,则须位于2
和36
之间(含 2 和 36)。基之后及数字之间的前导空格、单下划线将被忽略。如果不存在数字,将触发ValueError
。参见
Python methods
int.to_bytes()
andint.from_bytes()
to convert aPyLongObject
to/from an array of bytes in base256
. You can call those from C usingPyObject_CallMethod()
.
-
PyObject *
PyLong_FromUnicodeObject
(PyObject *u, int base)¶ - Return value: New reference.
将字符串 u 中的 Unicode 数字序列转换为 Python 整数值。
3.3 新版功能.
-
PyObject *
PyLong_FromVoidPtr
(void *p)¶ - Return value: New reference. Part of the Stable ABI.
从指针 p 创建一个 Python 整数。可以使用
PyLong_AsVoidPtr()
返回的指针值。
-
long
PyLong_AsLong
(PyObject *obj)¶ - Part of the Stable ABI.
Return a C
long
representation of obj. If obj is not an instance ofPyLongObject
, first call its__index__()
method (if present) to convert it to aPyLongObject
.Raise
OverflowError
if the value of obj is out of range for along
.出错则返回
-1
。请用PyErr_Occurred()
找出具体问题。在 3.8 版更改: 如果可用将使用
__index__()
。在 3.10 版更改: 本函数不再使用
__int__()
。
-
long
PyLong_AsLongAndOverflow
(PyObject *obj, int *overflow)¶ - Part of the Stable ABI.
Return a C
long
representation of obj. If obj is not an instance ofPyLongObject
, first call its__index__()
method (if present) to convert it to aPyLongObject
.如果 obj 的值大于
LONG_MAX
或小于LONG_MIN
,则会把 *overflow 分别置为``1`` 或-1
,并返回1
;否则,将 *overflow 置为 0。如果发生其他异常,则会按常规把 *overflow 置为0
,并返回-1
。出错则返回
-1
。请用PyErr_Occurred()
找出具体问题。在 3.8 版更改: 如果可用将使用
__index__()
。在 3.10 版更改: 本函数不再使用
__int__()
。
-
long long
PyLong_AsLongLong
(PyObject *obj)¶ - Part of the Stable ABI.
Return a C
long long
representation of obj. If obj is not an instance ofPyLongObject
, first call its__index__()
method (if present) to convert it to aPyLongObject
.Raise
OverflowError
if the value of obj is out of range for along long
.出错则返回
-1
。请用PyErr_Occurred()
找出具体问题。在 3.8 版更改: 如果可用将使用
__index__()
。在 3.10 版更改: 本函数不再使用
__int__()
。
-
long long
PyLong_AsLongLongAndOverflow
(PyObject *obj, int *overflow)¶ - Part of the Stable ABI.
Return a C
long long
representation of obj. If obj is not an instance ofPyLongObject
, first call its__index__()
method (if present) to convert it to aPyLongObject
.如果 obj 的值大于
LLONG_MAX
或小于LLONG_MIN
,则按常规将 *overflow 分别置为1
或-1
,并返回 -1,否则将 *overflow 置为 0。如果触发其他异常则 *overflow 置为 0 并返回 -1。出错则返回
-1
。请用PyErr_Occurred()
找出具体问题。3.2 新版功能.
在 3.8 版更改: 如果可用将使用
__index__()
。在 3.10 版更改: 本函数不再使用
__int__()
。
-
Py_ssize_t
PyLong_AsSsize_t
(PyObject *pylong)¶ - Part of the Stable ABI.
返回 pylong 的 C 语言
Py_ssize_t
形式。pylong 必须是PyLongObject
的实例。如果 pylong 的值超出了
Py_ssize_t
的取值范围则会引发OverflowError
。出错则返回
-1
。请用PyErr_Occurred()
找出具体问题。
-
unsigned long
PyLong_AsUnsignedLong
(PyObject *pylong)¶ - Part of the Stable ABI.
Return a C
unsigned long
representation of pylong. pylong must be an instance ofPyLongObject
.Raise
OverflowError
if the value of pylong is out of range for aunsigned long
.出错时返回
(unsigned long)-1
,请利用PyErr_Occurred()
辨别具体问题。
-
size_t
PyLong_AsSize_t
(PyObject *pylong)¶ - Part of the Stable ABI.
返回 pylong 的 C 语言
size_t
形式。pylong 必须是PyLongObject
的实例。如果 pylong 的值超出了
size_t
的取值范围则会引发OverflowError
。出错时返回
(size_t)-1
,请利用PyErr_Occurred()
辨别具体问题。
-
unsigned long long
PyLong_AsUnsignedLongLong
(PyObject *pylong)¶ - Part of the Stable ABI.
Return a C
unsigned long long
representation of pylong. pylong must be an instance ofPyLongObject
.Raise
OverflowError
if the value of pylong is out of range for anunsigned long long
.出错时返回
(unsigned long long)-1
,请利用PyErr_Occurred()
辨别具体问题。在 3.1 版更改: 现在 pylong 为负值会触发
OverflowError
,而不是TypeError
。
-
unsigned long
PyLong_AsUnsignedLongMask
(PyObject *obj)¶ - Part of the Stable ABI.
Return a C
unsigned long
representation of obj. If obj is not an instance ofPyLongObject
, first call its__index__()
method (if present) to convert it to aPyLongObject
.If the value of obj is out of range for an
unsigned long
, return the reduction of that value moduloULONG_MAX + 1
.出错时返回
(unsigned long)-1
,请利用PyErr_Occurred()
辨别具体问题。在 3.8 版更改: 如果可用将使用
__index__()
。在 3.10 版更改: 本函数不再使用
__int__()
。
-
unsigned long long
PyLong_AsUnsignedLongLongMask
(PyObject *obj)¶ - Part of the Stable ABI.
Return a C
unsigned long long
representation of obj. If obj is not an instance ofPyLongObject
, first call its__index__()
method (if present) to convert it to aPyLongObject
.If the value of obj is out of range for an
unsigned long long
, return the reduction of that value moduloULLONG_MAX + 1
.出错时返回
(unsigned long long)-1
,请利用PyErr_Occurred()
辨别具体问题。在 3.8 版更改: 如果可用将使用
__index__()
。在 3.10 版更改: 本函数不再使用
__int__()
。
-
double
PyLong_AsDouble
(PyObject *pylong)¶ - Part of the Stable ABI.
Return a C
double
representation of pylong. pylong must be an instance ofPyLongObject
.Raise
OverflowError
if the value of pylong is out of range for adouble
.出错时返回
-1.0
,请利用PyErr_Occurred()
辨别具体问题。
-
void *
PyLong_AsVoidPtr
(PyObject *pylong)¶ - Part of the Stable ABI.
Convert a Python integer pylong to a C
void
pointer. If pylong cannot be converted, anOverflowError
will be raised. This is only assured to produce a usablevoid
pointer for values created withPyLong_FromVoidPtr()
.出错时返回
NULL
,请利用PyErr_Occurred()
辨别具体问题。