整数型オブジェクト (integer object)

すべての整数は任意の長さをもつ “long” 整数として実装されます。

PyLongObject

この PyObject のサブタイプは整数型を表現します。

PyTypeObject PyLong_Type

この PyTypeObject のインスタンスは Python 整数型を表現します。これは Python レイヤにおける int と同じオブジェクトです。

int PyLong_Check(PyObject *p)

引数が PyLongObjectPyLongObject のサブタイプのときに真を返します。

int PyLong_CheckExact(PyObject *p)

引数が PyLongObject 型で、かつ PyLongObject 型のサブタイプでないときに真を返します。

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

v から新たな PyLongObject オブジェクトを生成して返します。失敗のときには NULL を返します。

現在の実装では、-5 から 256 までの全ての整数に対する整数オブジェクトの配列を保持するようにしており、この範囲の数を生成すると、実際には既存のオブジェクトに対する参照が返るようになっています。従って、1 の値を変えることすら可能です。変えてしまった場合の Python の挙動は未定義です :-)

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

Cの unsigned long から新たな PyLongObject オブジェクトを生成して返します。失敗した際には NULL を返します。

PyObject* PyLong_FromSsize_t(Py_ssize_t v)

C の Py_ssize_t 型から新たな PyLongObject オブジェクトを生成して返します。 失敗のときには NULL を返します。

PyObject* PyLong_FromSize_t(size_t v)

C の size_t 型から新たな PyLongObject オブジェクトを生成して返します。 失敗のときには NULL を返します。

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

C の long long 型から新たな PyLongObject オブジェクトを生成して返します。失敗のときには NULL を返します。

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

C の unsigned long long 型から新たな PyLongObject オブジェクトを生成して返します。失敗のときには NULL を返します。

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

v の整数部から新たな PyLongObject オブジェクトを生成して返します。失敗のときには NULL を返します。

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.

Unicode 数値列を Python 整数値に変換します。Unicode 文字列はまず PyUnicode_EncodeDecimal() を用いてバイト文字列にエンコードされ、次に PyLong_FromString() を用いて変換されます。

バージョン 3.3 で非推奨、バージョン 4.0 で削除予定: 古いスタイルの Py_UNICODE API の一部です; PyLong_FromUnicodeObject() を使用するように移行してください。

PyObject* PyLong_FromUnicodeObject(PyObject *u, int base)

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)

obj が表す、Cの long 表現を返します。もし objPyLongObject のインスタンスでなければ、まず、その __int__() メソッドを (もしあれば) 呼び出して、オブジェクトを PyLongObject に変換します。

もし obj の値が long の範囲外であれば、 OverflowError を送出します。

long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)

obj が表す、Cの long 表現を返します。もし objPyLongObject のインスタンスでなければ、まず、その __int__() メソッドを (もしあれば) 呼び出して、オブジェクトを PyLongObject に変換します。

もし、 obj の値が LONG_MAX より大きいか、 LONG_MIN より小さければ、 *overflow は、それぞれ 1-1 に設定され、 -1 を返します; さもなければ *overflow0 に設定されます。もし、ほかの例外が発生した場合は *overflow0 に設定され -1 を返します。

PY_LONG_LONG PyLong_AsLongLong(PyObject *obj)

obj が表す、Cの long long 表現を返します。もし objPyLongObject のインスタンスでなければ、まず、その __int__() メソッドを (もしあれば) 呼び出して、オブジェクトを PyLongObject に変換します。

もし obj の値が long の範囲外であれば、 OverflowError を送出します。

PY_LONG_LONG PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)

obj が表す、Cの long long 表現を返します。もし objPyLongObject のインスタンスでなければ、まず、その __int__() メソッドを (もしあれば) 呼び出して、オブジェクトを PyLongObject に変換します。

もし、 obj の値が PY_LLONG_MAX より大きいか、 PY_LLONG_MIN より小さければ、 *overflow は、それぞれ 1-1 に設定され、 -1 を返します; さもなければ *overflow0 に設定されます。もし、ほかの例外が発生した場合は *overflow0 に設定され -1 を返します。

バージョン 3.2 で追加.

Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)

pylong を表す C の Py_ssize_t を返します。 pylongPyLongObject のインスタンスでなければなりません。

もし pylong の値が Py_ssize_t の範囲外であれば、 OverflowError を送出します。

unsigned long PyLong_AsUnsignedLong(PyObject *pylong)

pylong を表す C の unsigned long を返します。 pylongPyLongObject のインスタンスでなければなりません。

もし pylong の値が unsigned long の範囲外であれば、 OverflowError を送出します。

size_t PyLong_AsSize_t(PyObject *pylong)

pylong を表す C の size_t を返します。 pylongPyLongObject のインスタンスでなければなりません。

もし pylong の値が size_t の範囲外であれば、 OverflowError を送出します。

unsigned PY_LONG_LONG PyLong_AsUnsignedLongLong(PyObject *pylong)

pylong を表す C の unsigned PY_LONG_LONG を返します。 pylongPyLongObject のインスタンスでなければなりません。

もし pylong の値が unsigned PY_LONG_LONG の範囲外であれば、 OverflowError を送出します。

バージョン 3.1 で変更: pylong を指定した際に TypeError ではなく、 OverflowError を送出するようになりました。

unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)

obj が表す、C の unsigned long 表現を返します。もし objPyLongObject のインスタンスでなければ、まず、その __int__() メソッドを (もしあれば) 呼び出して、オブジェクトを PyLongObject に変換します。

obj の値が unsigned long の範囲から外れていた場合は、 ULONG_MAX + 1 を法とした剰余を返します。

unsigned PY_LONG_LONG PyLong_AsUnsignedLongLongMask(PyObject *obj)

obj が表す、C の unsigned long long 表現を返します。もし objPyLongObject のインスタンスでなければ、まず、その __int__() メソッドを (もしあれば) 呼び出して、オブジェクトを PyLongObject に変換します。

obj の値が unsigned long long の範囲から外れていた場合は、 PY_ULLONG_MAX + 1 を法とした剰余を返します。

double PyLong_AsDouble(PyObject *pylong)

pylong を表す C の double を返します。 pylongPyLongObject のインスタンスでなければなりません。

もし pylong の値が double の範囲外であれば、 OverflowError を送出します。

void* PyLong_AsVoidPtr(PyObject *pylong)

Python の整数型を指す pylong を、 C の void ポインタに変換します。 pylong を変換できなければ、 OverflowError を送出します。この関数は PyLong_FromVoidPtr() で値を生成するときに使うような void ポインタ型を生成できるだけです。