整数型对象
所有整数都使用以任意大小的长整数对象表示。
在出错时,大多数 PyLong_As*
API返回 (返回值类型)-1
,无法与一般的数字区分开来。请使用 PyErr_Occurred() 来区分。
PyLongObject
表示 Python 整数对象的 PyObject 子类型。
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
(long v*)
Return value: New reference.
Return a new PyLongObject object from v, or NULL on failure.
The current implementation keeps an array of integer objects for all integers between -5
and 256
, when you create an int in that range you actually just get back a reference to the existing object. So it should be possible to change the value of 1
. I suspect the behaviour of Python in this case is undefined. :-)
PyObject PyLong_FromUnsignedLong
(unsigned long v*)
Return value: New reference.
Return a new PyLongObject object from a C unsigned long
, or NULL on failure.
PyObject PyLong_FromSsize_t
(Py_ssize_t v*)
Return a new PyLongObject object from a C Py_ssize_t
, or NULL on failure.
PyObject PyLong_FromSize_t
(size_t v*)
Return a new PyLongObject object from a C size_t
, or NULL on failure.
PyObject PyLong_FromLongLong
(long long v*)
Return value: New reference.
Return a new PyLongObject object from a C long long
, or NULL on failure.
PyObject PyLong_FromUnsignedLongLong
(unsigned long long v*)
Return value: New reference.
Return a new PyLongObject object from a C unsigned long long
, or NULL on failure.
PyObject PyLong_FromDouble
(double v*)
Return value: New reference.
Return a new PyLongObject object from the integer part of v, or NULL on failure.
PyObject PyLong_FromString
(const char **str, char **pend, int base)
Return value: New reference.
Return a new PyLongObject based on the string value in str, which is interpreted according to the radix in base. If pend is non-NULL, *pend will point to the first character in str which follows the representation of the number. If base is 0
, str is interpreted using the 整型数字面值 definition; in this case, leading zeros in a non-zero decimal number raises a ValueError. If base is not 0
, it must be between 2
and 36
, inclusive. Leading spaces and single underscores after a base specifier and between digits are ignored. If there are no digits, ValueError will be raised.
PyObject PyLong_FromUnicode
(Py_UNICODE **u, Py_ssize_t length, int base)
Return value: New reference.
Convert a sequence of Unicode digits to a Python integer value. The Unicode string is first encoded to a byte string using PyUnicode_EncodeDecimal()
and then converted using PyLong_FromString().
Deprecated since version 3.3, will be removed in version 4.0: 旧的 Py_UNICODE API的一部分;请迁移到使用 PyLong_FromUnicodeObject() 。
PyObject PyLong_FromUnicodeObject
(PyObject **u, int base)
Convert a sequence of Unicode digits in the string u to a Python integer value. The Unicode string is first encoded to a byte string using PyUnicode_EncodeDecimal()
and then converted using PyLong_FromString().
3.3 新版功能.
PyObject PyLong_FromVoidPtr
(void **p)
Return value: New reference.
从指针 p 创建一个 Python 整数。可以使用 PyLong_AsVoidPtr() 返回的指针值。
long PyLong_AsLong
(PyObject *obj)
Return a C long
representation of obj. If obj is not an instance of PyLongObject, first call its __int__() method (if present) to convert it to a PyLongObject.
如果 obj 的值溢出了 long
的范围,会抛出 OverflowError。
发生错误时返回 -1
。使用 PyErr_Occurred() 来消歧义。
long PyLong_AsLongAndOverflow
(PyObject obj*, int overflow*)
Return a C long
representation of obj. If obj is not an instance of PyLongObject, first call its __int__() method (if present) to convert it to a PyLongObject.
If the value of obj is greater than LONG_MAX
or less than LONG_MIN
, set overflow* to 1
or -1
, respectively, and return -1
; otherwise, set overflow to 0
. If any other exception occurs set **overflow to 0
and return -1
as usual.
发生错误时返回 -1
。使用 PyErr_Occurred() 来消歧义。
long long PyLong_AsLongLong
(PyObject *obj)
Return a C long long
representation of obj. If obj is not an instance of PyLongObject, first call its __int__() method (if present) to convert it to a PyLongObject.
如果 obj 的值溢出了 long
的范围,会抛出 OverflowError。
发生错误时返回 -1
。使用 PyErr_Occurred() 来消歧义。
long long PyLong_AsLongLongAndOverflow
(PyObject obj*, int overflow*)
Return a C long long
representation of obj. If obj is not an instance of PyLongObject, first call its __int__() method (if present) to convert it to a PyLongObject.
If the value of obj is greater than PY_LLONG_MAX
or less than PY_LLONG_MIN
, set overflow* to 1
or -1
, respectively, and return -1
; otherwise, set overflow to 0
. If any other exception occurs set **overflow to 0
and return -1
as usual.
发生错误时返回 -1
。使用 PyErr_Occurred() 来消歧义。
3.2 新版功能.
Py_ssize_t PyLong_AsSsize_t
(PyObject *pylong)
Return a C Py_ssize_t
representation of pylong. pylong must be an instance of PyLongObject.
Raise OverflowError if the value of pylong is out of range for a Py_ssize_t
.
发生错误时返回 -1
。使用 PyErr_Occurred() 来消歧义。
unsigned long PyLong_AsUnsignedLong
(PyObject *pylong)
Return a C unsigned long
representation of pylong. pylong must be an instance of PyLongObject.
Raise OverflowError if the value of pylong is out of range for a unsigned long
.
Returns (unsigned long)-1
on error. Use PyErr_Occurred() to disambiguate.
size_t PyLong_AsSize_t
(PyObject *pylong)
Return a C size_t
representation of pylong. pylong must be an instance of PyLongObject.
Raise OverflowError if the value of pylong is out of range for a size_t
.
Returns (size_t)-1
on error. Use PyErr_Occurred() to disambiguate.
unsigned long long PyLong_AsUnsignedLongLong
(PyObject *pylong)
Return a C unsigned long long
representation of pylong. pylong must be an instance of PyLongObject.
Raise OverflowError if the value of pylong is out of range for an unsigned long long
.
Returns (unsigned long long)-1
on error. Use PyErr_Occurred() to disambiguate.
在 3.1 版更改: A negative pylong now raises OverflowError, not TypeError.
unsigned long PyLong_AsUnsignedLongMask
(PyObject *obj)
Return a C unsigned long
representation of obj. If obj is not an instance of PyLongObject, first call its __int__() method (if present) to convert it to a PyLongObject.
If the value of obj is out of range for an unsigned long
, return the reduction of that value modulo ULONG_MAX + 1
.
发生错误时返回 -1
。使用 PyErr_Occurred() 来消歧义。
unsigned long long PyLong_AsUnsignedLongLongMask
(PyObject *obj)
Return a C unsigned long long
representation of obj. If obj is not an instance of PyLongObject, first call its __int__() method (if present) to convert it to a PyLongObject.
If the value of obj is out of range for an unsigned long long
, return the reduction of that value modulo PY_ULLONG_MAX + 1
.
发生错误时返回 -1
。使用 PyErr_Occurred() 来消歧义。
double PyLong_AsDouble
(PyObject *pylong)
Return a C double
representation of pylong. pylong must be an instance of PyLongObject.
Raise OverflowError if the value of pylong is out of range for a double
.
Returns -1.0
on error. Use PyErr_Occurred() to disambiguate.
void PyLong_AsVoidPtr
(PyObject **pylong)
Convert a Python integer pylong to a C void
pointer. If pylong cannot be converted, an OverflowError will be raised. This is only assured to produce a usable void
pointer for values created with PyLong_FromVoidPtr().
Returns NULL on error. Use PyErr_Occurred() to disambiguate.