Integer Objects¶
所有整数实现为任意大小的“长”整数对象。
- 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)¶ - 返回值:新引用。
在失败时从v或NULL返回新的
PyLongObject
对象。当前实现为
-5
和256
之间的所有整数保留整数对象数组,当您在该范围中创建一个int时,实际上只是返回对现有目的。因此,应该可以更改1
的值。我怀疑Python的行为在这种情况下是未定义的。:-)
- PyObject*
PyLong_FromUnsignedLong
(unsigned long v)¶ - 返回值:新引用。
在失败时从C
无符号 长
或NULL返回新的PyLongObject
- PyObject*
PyLong_FromSsize_t
(Py_ssize_t v)¶ 在失败时从C
Py_ssize_t
或NULL返回新的PyLongObject
对象。
- PyObject*
PyLong_FromSize_t
(size_t v)¶ 在失败时从C
size_t
或NULL返回新的PyLongObject
对象。
- PyObject*
PyLong_FromLongLong
(PY_LONG_LONG v)¶ - 返回值:新引用。
在失败时从C
长 长
或NULL返回新的PyLongObject
。
- PyObject*
PyLong_FromUnsignedLongLong
(unsigned PY_LONG_LONG v)¶ - 返回值:新引用。
Return a new
PyLongObject
object from a Cunsigned long long
, or NULL on failure.
- PyObject*
PyLong_FromDouble
(double v)¶ - 返回值:新引用。
在失败时从v的整数部分或NULL返回新的
PyLongObject
对象。
- PyObject*
PyLong_FromString
(const char *str, char **pend, int base)¶ - 返回值:新引用。
根据str中的字符串值返回新的
PyLongObject
,根据base中的基数解释。如果pend为非NULL,则* pend将指向str中的第一个字符,号码。如果base为0
,则将根据str的前导字符确定基数:if str'0x'
或'0X'
,将使用基数16;如果str以'0o'
或'0O'
开始,将使用基数8;如果str以'0b'
或'0B'
开始,将使用基数2;否则将使用基数10。如果base不是0
,则它必须在2
和36
之间,包括。前导空格被忽略。如果没有数字,将会引发ValueError
。
- PyObject*
PyLong_FromUnicode
(Py_UNICODE *u, Py_ssize_t length, int base)¶ - 返回值:新引用。
将Unicode数字序列转换为Python整数值。首先使用
PyUnicode_EncodeDecimal()
将Unicode字符串编码为字节字符串,然后使用PyLong_FromString()
进行转换。从版本3.3开始弃用,将在版本4.0中删除:旧式
Py_UNICODE
API的一部分;请使用PyLong_FromUnicodeObject()
迁移。
- PyObject*
PyLong_FromUnicodeObject
(PyObject *u, int base)¶ 将字符串u中的Unicode数字序列转换为Python整数值。首先使用
PyUnicode_EncodeDecimal()
将Unicode字符串编码为字节字符串,然后使用PyLong_FromString()
进行转换。版本3.3中的新功能。
- PyObject*
PyLong_FromVoidPtr
(void *p)¶ - 返回值:新引用。
从指针p创建一个Python整数。可以使用
PyLong_AsVoidPtr()
从结果值检索指针值。
- long
PyLong_AsLong
(PyObject *obj)¶ 返回obj的C
long
表示。如果obj不是PyLongObject
的实例,则首先调用其__int__()
方法(如果存在)将其转换为PyLongObject
。如果obj的值超出
long
的范围,则引发OverflowError
。
- long
PyLong_AsLongAndOverflow
(PyObject *obj, int *overflow)¶ 返回obj的C
long
表示。如果obj不是PyLongObject
的实例,则首先调用其__int__()
方法(如果存在)将其转换为PyLongObject
。如果obj的值大于
LONG_MAX
或小于LONG_MIN
,请将* overflow设置为1
或-1
,并返回-1
;否则,将* overflow设置为0
。如果发生任何其他异常,将* overflow设置为0
,并照常返回-1
。
- PY_LONG_LONG
PyLong_AsLongLong
(PyObject *obj)¶ 返回obj的C
长 长
。如果obj不是PyLongObject
的实例,则首先调用其__int__()
方法(如果存在)将其转换为PyLongObject
。如果obj的值超出
long
的范围,则引发OverflowError
。
- PY_LONG_LONG
PyLong_AsLongLongAndOverflow
(PyObject *obj, int *overflow)¶ 返回obj的C
长 长
。如果obj不是PyLongObject
的实例,则首先调用其__int__()
方法(如果存在)将其转换为PyLongObject
。如果obj的值大于
PY_LLONG_MAX
或小于PY_LLONG_MIN
,请将* overflow设置为1
或-1
,并返回-1
;否则,将* overflow设置为0
。如果发生任何其他异常,将* overflow设置为0
,并照常返回-1
。版本3.2中的新功能。
- Py_ssize_t
PyLong_AsSsize_t
(PyObject *pylong)¶ 返回pylong的C
Py_ssize_t
表示。pylong必须是PyLongObject
的实例。如果pylong的值超出
Py_ssize_t
的范围,则引发OverflowError
。
- unsigned long
PyLong_AsUnsignedLong
(PyObject *pylong)¶ 返回pylong的C
无符号 长
。pylong必须是PyLongObject
的实例。如果pylong的值超出了
无符号 长
的范围,则引发OverflowError
。
- size_t
PyLong_AsSize_t
(PyObject *pylong)¶ 返回pylong的C
size_t
表示。pylong必须是PyLongObject
的实例。如果pylong的值超出
size_t
的范围,则引发OverflowError
。
- unsigned PY_LONG_LONG
PyLong_AsUnsignedLongLong
(PyObject *pylong)¶ 返回pylong的C
无符号 PY_LONG_LONG
。pylong必须是PyLongObject
的实例。如果pylong的值超出了
无符号 PY_LONG_LONG
的范围,则引发OverflowError
。在版本3.1中更改:负向pylong现在引发
OverflowError
,而不是TypeError
。
- unsigned long
PyLong_AsUnsignedLongMask
(PyObject *obj)¶ 返回obj的C
无符号 长
如果obj不是PyLongObject
的实例,则首先调用其__int__()
方法(如果存在)将其转换为PyLongObject
。If the value of obj is out of range for an
unsigned long
, return the reduction of that value moduloULONG_MAX + 1
.
- unsigned PY_LONG_LONG
PyLong_AsUnsignedLongLongMask
(PyObject *obj)¶ 返回obj的C
无符号 长 长
如果obj不是PyLongObject
的实例,则首先调用其__int__()
方法(如果存在)将其转换为PyLongObject
。如果obj的值超出
无符号 长 长
的范围,以PY_ULLONG_MAX + 1
返回该值的减少。
- double
PyLong_AsDouble
(PyObject *pylong)¶ 返回pylong的C
double
表示。pylong必须是PyLongObject
的实例。如果pylong的值超出
double
的范围,则引发OverflowError
。
- void*
PyLong_AsVoidPtr
(PyObject *pylong)¶ 将Python整数pylong转换为C
void
指针。如果pylong无法转换,则会出现OverflowError
。这只能为使用PyLong_FromVoidPtr()
创建的值生成可用的void
指针。