整數(shù)型對(duì)象?

所有整數(shù)都使用以任意大小的長(zhǎng)整數(shù)對(duì)象表示。

在出錯(cuò)時(shí),大多數(shù) PyLong_As* API返回 (返回值類型)-1 ,無(wú)法與一般的數(shù)字區(qū)分開來(lái)。請(qǐng)使用 PyErr_Occurred() 來(lái)區(qū)分。

PyLongObject?

表示 Python 整數(shù)對(duì)象的 PyObject 子類型。

PyTypeObject PyLong_Type?

這個(gè) PyTypeObject 的實(shí)例表示 Python 的整數(shù)類型。與Python層中的 int 相同。

int PyLong_Check(PyObject?*p)?

如果參數(shù)是 PyLongObjectPyLongObject 的子類型,返回 true 。

int PyLong_CheckExact(PyObject?*p)?

如果參數(shù)是 PyLongObject 但不是 PyLongObject 的子類型,返回 true。

PyObject* PyLong_FromLong(long?v)?
Return value: New reference.

v 返回一個(gè)新的 PyLongObject 對(duì)象,失敗時(shí)返回 NULL

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.

由 C unsigned long 類型返回一個(gè)新的 PyLongObject 對(duì)象,失敗時(shí)返回 NULL 。

PyObject* PyLong_FromSsize_t(Py_ssize_t?v)?
Return value: New reference.

從 C Py_ssize_t 類型返回一個(gè)新的 PyLongObject 對(duì)象,如果失敗則返回``NULL``。

PyObject* PyLong_FromSize_t(size_t?v)?
Return value: New reference.

從 C size_t 返回一個(gè)新的 PyLongObject 對(duì)象,如果失敗則返回``NULL``。

PyObject* PyLong_FromLongLong(long long?v)?
Return value: New reference.

從 C long long 返回一個(gè)新的 PyLongObject 對(duì)象,失敗時(shí)返回``NULL``。

PyObject* PyLong_FromUnsignedLongLong(unsigned long long?v)?
Return value: New reference.

從 C unsigned long long 返回一個(gè)新的 PyLongObject 對(duì)象,失敗時(shí)返回``NULL``。

PyObject* PyLong_FromDouble(double?v)?
Return value: New reference.

v 的整數(shù)部分返回一個(gè)新的 PyLongObject 對(duì)象,如果失敗則返回``NULL``。

PyObject* PyLong_FromString(const char?*str, char?**pend, int?base)?
Return value: New reference.

根據(jù) str 字符串值返回一個(gè)新的 PyLongObject ,base 指定基數(shù)。如果 pend 不是 NULL , /*pend 將指向 str 中表示這個(gè)數(shù)字部分的后面的第一個(gè)字符。如果 base0 , str 將使用 整型數(shù)字面值 定義來(lái)解釋;在這種情況下,一個(gè)非零的十進(jìn)制數(shù)中的前導(dǎo)零會(huì)引發(fā)一個(gè) ValueError 。如果 base 不是 0 ,它必須在 2 和` 36` 之間,包括2和36?;鶖?shù)說(shuō)明符后以及數(shù)字之間的前導(dǎo)空格、單下劃線將被忽略。如果沒有數(shù)字,將引發(fā) ValueError。

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的一部分;請(qǐng)遷移到使用 PyLong_FromUnicodeObject() 。

PyObject* PyLong_FromUnicodeObject(PyObject?*u, int?base)?
Return value: New reference.

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 創(chuàng)建一個(gè) Python 整數(shù)。可以使用 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 的范圍,會(huì)拋出 OverflowError。

發(fā)生錯(cuò)誤時(shí)返回 -1 。使用 PyErr_Occurred() 來(lái)消歧義。

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.

發(fā)生錯(cuò)誤時(shí)返回 -1 。使用 PyErr_Occurred() 來(lái)消歧義。

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 long ,觸發(fā) OverflowError

發(fā)生錯(cuò)誤時(shí)返回 -1 。使用 PyErr_Occurred() 來(lái)消歧義。

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.

發(fā)生錯(cuò)誤時(shí)返回 -1 。使用 PyErr_Occurred() 來(lái)消歧義。

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.

發(fā)生錯(cuò)誤時(shí)返回 -1 。使用 PyErr_Occurred() 來(lái)消歧義。

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.

Returns (unsigned long)-1 on error. Use PyErr_Occurred() to disambiguate.

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.

Returns (unsigned long long)-1 on error. Use PyErr_Occurred() to disambiguate.

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.