番号プロトコル—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/c-api/number
移動先:案内検索

番号プロトコル

int PyNumber_Check(PyObject *o)

オブジェクト o が数値プロトコルを提供する場合は1を返し、それ以外の場合はfalseを返します。 この関数は常に成功します。

バージョン3.8で変更: o がインデックス整数の場合、1を返します。

PyObject *PyNumber_Add(PyObject *o1, PyObject *o2)
o1o2 を加算した結果、または失敗した場合はNULLを加算した結果を返します。 これは、Python式o1 + o2と同等です。
PyObject *PyNumber_Subtract(PyObject *o1, PyObject *o2)
o1 から o2 を引いた結果、または失敗した場合はNULLを返します。 これは、Python式o1 - o2と同等です。
PyObject *PyNumber_Multiply(PyObject *o1, PyObject *o2)
o1o2 を乗算した結果、または失敗した場合はNULLを返します。 これは、Python式o1 * o2と同等です。
PyObject *PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2)

o1o2 、または失敗した場合はNULLでの行列乗算の結果を返します。 これは、Python式o1 @ o2と同等です。

バージョン3.5の新機能。

PyObject *PyNumber_FloorDivide(PyObject *o1, PyObject *o2)
o1 のフロアを o2 で割った値、または失敗した場合はNULLを返します。 これは、整数の「古典的な」除算に相当します。
PyObject *PyNumber_TrueDivide(PyObject *o1, PyObject *o2)
o1o2 で割った値、または失敗した場合はNULLの妥当な近似値を返します。 2進浮動小数点数は概算であるため、戻り値は「概算」です。 基数2ですべての実数を表すことはできません。 この関数は、2つの整数が渡されると、浮動小数点値を返すことができます。
PyObject *PyNumber_Remainder(PyObject *o1, PyObject *o2)
o1o2 で除算した余り、または失敗した場合はNULLを返します。 これは、Python式o1 % o2と同等です。
PyObject *PyNumber_Divmod(PyObject *o1, PyObject *o2)
組み込み関数 divmod()を参照してください。 失敗するとNULLを返します。 これは、Python式divmod(o1, o2)と同等です。
PyObject *PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3)
組み込み関数 pow()を参照してください。 失敗するとNULLを返します。 これは、Python式pow(o1, o2, o3)と同等です。ここで、 o3 はオプションです。 o3 を無視する場合は、代わりに Py_None を渡します( o3NULLを渡すと、不正なメモリアクセスが発生します)。
PyObject *PyNumber_Negative(PyObject *o)
成功した場合は o の否定を返し、失敗した場合はNULLの否定を返します。 これは、Python式-oと同等です。
PyObject *PyNumber_Positive(PyObject *o)
成功した場合は o を返し、失敗した場合はNULLを返します。 これは、Python式+oと同等です。
PyObject *PyNumber_Absolute(PyObject *o)
失敗した場合は、 o またはNULLの絶対値を返します。 これは、Python式abs(o)と同等です。
PyObject *PyNumber_Invert(PyObject *o)
成功した場合は o のビット単位の否定を返し、失敗した場合はNULLを返します。 これは、Python式~oと同等です。
PyObject *PyNumber_Lshift(PyObject *o1, PyObject *o2)
成功した場合は o1o2 、失敗した場合はNULLだけ左シフトした結果を返します。 これは、Python式o1 << o2と同等です。
PyObject *PyNumber_Rshift(PyObject *o1, PyObject *o2)
成功した場合は o1o2 、失敗した場合はNULLだけ右シフトした結果を返します。 これは、Python式o1 >> o2と同等です。
PyObject *PyNumber_And(PyObject *o1, PyObject *o2)
成功した場合は o1o2 の「ビット単位のand」を返し、失敗した場合はNULLを返します。 これは、Python式o1 & o2と同等です。
PyObject *PyNumber_Xor(PyObject *o1, PyObject *o2)
成功した場合は o2 による o1 の「ビット単位の排他的論理和」を返します。失敗した場合はNULLを返します。 これは、Python式o1 ^ o2と同等です。
PyObject *PyNumber_Or(PyObject *o1, PyObject *o2)
成功した場合は o1o2 の「ビット単位のor」を返し、失敗した場合はNULLを返します。 これは、Python式o1 | o2と同等です。
PyObject *PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2)
o1o2 を加算した結果、または失敗した場合はNULLを加算した結果を返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Pythonステートメントo1 += o2と同等です。
PyObject *PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2)
o1 から o2 を引いた結果、または失敗した場合はNULLを返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Pythonステートメントo1 -= o2と同等です。
PyObject *PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2)
o1o2 を乗算した結果、または失敗した場合はNULLを返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Pythonステートメントo1 *= o2と同等です。
PyObject *PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2)

o1o2 、または失敗した場合はNULLでの行列乗算の結果を返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Pythonステートメントo1 @= o2と同等です。

バージョン3.5の新機能。

PyObject *PyNumber_InPlaceFloorDivide(PyObject *o1, PyObject *o2)
o1o2 で除算する、または失敗した場合はNULLを除算する数学的フロアを返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Pythonステートメントo1 //= o2と同等です。
PyObject *PyNumber_InPlaceTrueDivide(PyObject *o1, PyObject *o2)
o1o2 で割った値、または失敗した場合はNULLの妥当な近似値を返します。 2進浮動小数点数は概算であるため、戻り値は「概算」です。 基数2ですべての実数を表すことはできません。 この関数は、2つの整数が渡されると、浮動小数点値を返すことができます。 o1 がサポートしている場合、操作はインプレースで実行されます。
PyObject *PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2)
o1o2 で除算した余り、または失敗した場合はNULLを返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Pythonステートメントo1 %= o2と同等です。
PyObject *PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3)
組み込み関数 pow()を参照してください。 失敗するとNULLを返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、o3が Py_None の場合のPythonステートメントo1 **= o2と同等であり、それ以外の場合はpow(o1, o2, o3)のインプレースバリアントです。 o3 を無視する場合は、代わりに Py_None を渡します( o3NULLを渡すと、不正なメモリアクセスが発生します)。
PyObject *PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2)
成功した場合は o1o2 、失敗した場合はNULLだけ左シフトした結果を返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Pythonステートメントo1 <<= o2と同等です。
PyObject *PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2)
成功した場合は o1o2 、失敗した場合はNULLだけ右シフトした結果を返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Pythonステートメントo1 >>= o2と同等です。
PyObject *PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2)
成功した場合は o1o2 の「ビット単位のand」を返し、失敗した場合はNULLを返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Pythonステートメントo1 &= o2と同等です。
PyObject *PyNumber_InPlaceXor(PyObject *o1, PyObject *o2)
成功した場合は o2 による o1 の「ビット単位の排他的論理和」を返します。失敗した場合はNULLを返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Pythonステートメントo1 ^= o2と同等です。
PyObject *PyNumber_InPlaceOr(PyObject *o1, PyObject *o2)
成功した場合は o1o2 の「ビット単位のor」を返し、失敗した場合はNULLを返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Pythonステートメントo1 |= o2と同等です。
PyObject *PyNumber_Long(PyObject *o)
成功した場合は整数オブジェクトに変換された o を返し、失敗した場合はNULLを返します。 これは、Python式int(o)と同等です。
PyObject *PyNumber_Float(PyObject *o)
成功した場合はfloatオブジェクトに変換された o を返し、失敗した場合はNULLを返します。 これは、Python式float(o)と同等です。
PyObject *PyNumber_Index(PyObject *o)
成功した場合はPythonintに変換された o を返し、失敗した場合は TypeError 例外が発生したNULLを返します。
PyObject *PyNumber_ToBase(PyObject *n, int base)
基数 base に変換された整数 n を文字列として返します。 base 引数は、2、8、10、または16のいずれかである必要があります。 基数2、8、または16の場合、返される文字列には、それぞれ'0b''0o'、または'0x'の基数マーカーがプレフィックスとして付けられます。 n がPythonintでない場合は、最初に PyNumber_Index()で変換されます。
Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc)

o が整数として解釈できる場合、Py_ssize_t値に変換された o を返します。 呼び出しが失敗した場合、例外が発生し、-1が返されます。

o をPythonintに変換できるが、Py_ssize_t値に変換しようとすると、 OverflowError が発生する場合、 exc 引数が例外のタイプです。これが発生します(通常は IndexError または OverflowError )。 excNULLの場合、例外はクリアされ、値は負の整数の場合はPY_SSIZE_T_MINに、正の整数の場合はPY_SSIZE_T_MAXにクリップされます。

int PyIndex_Check(PyObject *o)
o がインデックス整数(tp_as_number構造体のnb_indexスロットが入力されている)の場合は1を返し、それ以外の場合は0を返します。 この関数は常に成功します。