整数对象 – 具体对象层(Python教程)(参考资料)
整数对象
所有整数都实现为任意大小的“长”整数对象.
错误,大多数PyLong_As*
API返回(return type)-1
哪个不能区分一个号码。使用 PyErr_Occurred()
消除歧义
PyLongObject
- 这个 的子类型
PyObject
代表一个Python整数对象.
- int
PyLong_Check
(的PyObject *p) - 如果它的参数是
PyLongObject
或的子类型PyLongObject
.
- 的一个子类型PyObject *
PyLong_FromLong
( long v) - Return value: New reference.
返回一个新的
PyLongObject
来自v或NULL失败的对象.当前实现为
-5
和256
,当你在该范围内创建一个int时,你实际上只需要返回对现有对象的引用。所以应该可以改变1
。我怀疑在这种情况下Python的行为是未定义的。: – )
- PyObject *
PyLong_FromSsize_t
(Py_ssize_t v) - Return value: New reference.
返回一个新的
PyLongObject
来自C的对象Py_ssize_t
, 要么NULL失败时
- PyObject *
PyLong_FromSize_t
(为size_t v) - Return value: New reference.
返回一个新的
PyLongObject
来自C的对象size_t
, 要么NULL失败时
- PyObject *
PyLong_FromLongLong
(长 v) - Return value: New reference.
返回一个新的
PyLongObject
来自C的对象long long
, 要么 NULL失败时
- PyObject *
PyLong_FromUnsignedLongLong
(unsigned long long v) - Return value: New reference.
返回一个新的
PyLongObject
来自C的对象unsigned long long
,要么 NULL失败时
- PyObject *
PyLong_FromDouble
(双 v) - Return value: New reference.
返回一个新的
PyLongObject
来自v, 要么NULL失败时
- PyObject *
PyLong_FromString
( const char *str,char **pend,int base) - Return value: New reference.
返回一个新
PyLongObject
基于str中的字符串值,根据base中的基数解释。如果pend不是NULL,*pend将指向str中的第一个字符,它跟在数字的表示之后。如果base0
, str使用解释整数文字定义;在这种情况下,非零十进制数的前导零会引发ValueError
。如果base不是0
,它必须在2
和36
, 包括的。在基本说明符之后和数字之间的前导空格和单个单独核心被忽略。如果没有数字,ValueError
将被抬起.
- PyObject*
PyLong_FromUnicode
( Py_UNICODE *u,Py_ssize_t length,int base) - Return value: New reference.
将Unicode数字序列转换为Python整数值。Unicodestring首先使用
PyUnicode_EncodeDecimal()
编码为字节串,然后使用PyLong_FromString()
.从版本3.3开始不推荐使用,将在版本4.0中删除:部分旧式
Py_UNICODE
API;请迁移到使用PyLong_FromUnicodeObject()
.
- PyObject *
PyLong_FromUnicodeObject
( PyObject *u,int base) - Return value: New reference.
将字符串u中的Unicode数字序列转换为Python整数值。Unicode字符串首先使用
PyUnicode_EncodeDecimal()
编码为字节字符串,然后使用PyLong_FromString()
.转换为版本3.3中的新增.
- PyObject *
PyLong_FromVoidPtr
( void *p) - Return value: New reference.
从指针p创建一个Python整数。使用
PyLong_AsVoidPtr()
.
- long
PyLong_AsLong
( PyObject *obj) -
返回
long
表示obj。如果obj不是PyLongObject
的实例,首先调用它的__int__()
方法(如果存在)将其转换为PyLongObject
.提升
OverflowError
如果obj超出范围long
.
- long
PyLong_AsLongAndOverflow
( PyObject *obj,int *overflow) - 返回
long
表示obj。如果obj不是PyLongObject
的实例,首先调用它的__int__()
方法(如果存在)将其转换为PyLongObject
.如果obj的值大于
LONG_MAX
或小于LONG_MIN
,设置*overflow到1
或-1
,分别和回复-1
;否则,设置*overflow到0
。如果有任何其他异常情况设置*overflow到0
并像往常一样返回-1
.
- 长龙
PyLong_AsLongLong
( PyObject *obj) -
返回一个C
long long
代表obj。如果obj不是PyLongObject
的实例,先调用它__int__()
方法(如果存在)将其转换为PyLongObject
.举起
OverflowError
如果值obj超出范围long
.返回
-1
出错了。使用PyErr_Occurred()
消除歧义
- 长
PyLong_AsLongLongAndOverflow
(的PyObject *obj,int *overflow) - 返回一个C
long long
代表obj。如果obj不是PyLongObject
,先叫它__int__()
方法(如果存在)将其转换为PyLongObject
.如果obj大于
PY_LLONG_MAX
或小于PY_LLONG_MIN
,分别设置*overflow到1
或-1
并返回-1
;否则,设置*overflow到0
。如果发生任何其他情况,请设置*overflow至0
像往常一样-1
返回错误地回复
-1
使用PyErr_Occurred()
消除歧义新版本3.2.
- Py_ssize_t
PyLong_AsSsize_t
( PyObject *pylong) -
返回一个C
Py_ssize_t
表示pylong. pylong必须是PyLongObject
.的一个实例//如果
OverflowError
的值超出pylong的范围,则提高Py_ssize_t
.错误时返回
-1
使用PyErr_Occurred()
消除歧义
- 长签
PyLong_AsUnsignedLong
( PyObject *pylong) -
返回一个C
unsigned long
表示pylong. pylong必须是PyLongObject
.的一个实例//如果
OverflowError
的值超出范围,则提高pylongaunsigned long
.在错误时返回
(unsigned long)-1
。使用PyErr_Occurred()
消除歧义
- size_t
PyLong_AsSize_t
(的PyObject *pylong) -
返回一个C
size_t
代表pylong. pylong必须是PyLongObject
.举起
OverflowError
如果值pylong超出范围size_t
.返回
(size_t)-1
出错。使用PyErr_Occurred()
消除歧义
- 长长的
PyLong_AsUnsignedLongLong
( PyObject *pylong) -
返回一个C
unsigned long long
表示pylong. pylong必须是PyLongObject
.的一个实例//如果
OverflowError
的价值提高pylong超出范围unsigned long long
.返回
(unsigned long long)-1
出错。使用PyErr_Occurred()
消除歧义在版本3.1中更改:否定pylong现在提出
OverflowError
,而不是TypeError
.
- unsigned long
PyLong_AsUnsignedLongMask
( PyObject *obj) - 返回一个C
unsigned long
表示obj。如果obj不是PyLongObject
的实例,首先调用它的__int__()
方法(如果存在)将其转换为PyLongObject
.如果//的值为obj超出了
unsigned long
的范围,以模数ULONG_MAX + 1
.返回该值的减少错误时返回
-1
。使用PyErr_Occurred()
消除歧义
- 长签
PyLong_AsUnsignedLongLongMask
( PyObject *obj) - 返回C
unsigned long long
表示obj。如果obj不是PyLongObject
的实例,首先调用它的__int__()
方法(如果存在)将其转换为PyLongObject
.如果//的值为obj超出了
unsigned long long
的范围,以模数PY_ULLONG_MAX + 1
.返回该值的减少错误时返回
-1
。使用PyErr_Occurred()
消除歧义
- 双重
PyLong_AsDouble
( PyObject *pylong) - 返回C
double
表示pylong. pylong必须是PyLongObject
.的bean实例//如果
OverflowError
的值超出pylong的范围,请提高double
.错误时返回
-1.0
。使用PyErr_Occurred()
消除歧义
- void*
PyLong_AsVoidPtr
(PyObject *pylong) - 将Python整数pylong转换为C
void
指针。如果pylong无法转换,OverflowError
将被提出。这只能保证为void
创建的值生成一个可用的PyLong_FromVoidPtr()
.指针。错误时返回NULL。使用
PyErr_Occurred()
来消除歧义
评论被关闭。