複素数オブジェクト—Pythonドキュメント

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

複素数オブジェクト

Pythonの複素数オブジェクトは、C APIから見たときに2つの異なるタイプとして実装されます。1つはPythonプログラムに公開されるPythonオブジェクトであり、もう1つは実際の複素数の値を表すC構造です。 APIは、両方を操作するための関数を提供します。

C構造体としての複素数

これらの構造体をパラメーターとして受け取り、結果として返す関数は、ポインターを介してそれらを逆参照するのではなく、値によって行うことに注意してください。 これはAPI全体で一貫しています。

type Py_complex

Python複素数オブジェクトの値部分に対応するC構造体。 複素数オブジェクトを処理するための関数のほとんどは、必要に応じて、このタイプの構造を入力値または出力値として使用します。 これは次のように定義されます。

typedef struct {
   double real;
   double imag;
} Py_complex;
Py_complex _Py_c_sum(Py_complex left, Py_complex right)
C Py_complex 表現を使用して、2つの複素数の合計を返します。
Py_complex _Py_c_diff(Py_complex left, Py_complex right)
C Py_complex 表現を使用して、2つの複素数の差を返します。
Py_complex _Py_c_neg(Py_complex num)
C Py_complex 表現を使用して、複素数 num の否定を返します。
Py_complex _Py_c_prod(Py_complex left, Py_complex right)
C Py_complex 表現を使用して、2つの複素数の積を返します。
Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)

C Py_complex 表現を使用して、2つの複素数の商を返します。

除数がnullの場合、このメソッドはゼロを返し、errnoEDOMに設定します。

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

C Py_complex 表現を使用して、 exp による num のべき乗を返します。

num がnullで、 exp が正の実数でない場合、このメソッドはゼロを返し、errnoEDOMに設定します。


Pythonオブジェクトとしての複素数

type PyComplexObject
PyObject のこのサブタイプは、Pythonの複素数オブジェクトを表します。
PyTypeObject PyComplex_Type
PyTypeObject のこのインスタンスは、Pythonの複素数型を表します。 Pythonレイヤーの complex と同じオブジェクトです。
int PyComplex_Check(PyObject *p)
引数が PyComplexObject または PyComplexObject のサブタイプである場合はtrueを返します。 この関数は常に成功します。
int PyComplex_CheckExact(PyObject *p)
引数が PyComplexObject であるが、 PyComplexObject のサブタイプではない場合、trueを返します。 この関数は常に成功します。
PyObject *PyComplex_FromCComplex(Py_complex v)
C Py_complex 値から新しいPython複素数オブジェクトを作成します。
PyObject *PyComplex_FromDoubles(double real, double imag)
real および imag から新しい PyComplexObject オブジェクトを返します。
double PyComplex_RealAsDouble(PyObject *op)
op の実数部をC double として返します。
double PyComplex_ImagAsDouble(PyObject *op)
op の虚数部をC double として返します。
Py_complex PyComplex_AsCComplex(PyObject *op)

複素数 opPy_complex 値を返します。

op がPythonの複素数オブジェクトではなく、__complex__()メソッドがある場合、このメソッドが最初に呼び出されて、 op がPythonの複素数オブジェクトに変換されます。 __complex__()が定義されていない場合は、__float__()にフォールバックします。 __float__()が定義されていない場合は、__index__()にフォールバックします。 失敗すると、このメソッドは-1.0を実際の値として返します。

バージョン3.8で変更:可能な場合は__index__()を使用します。