复数对象

从C API中查看时,python的复数对象被实现为两种不同的类型:一种是向python程序公开的python对象,另一种是表示实际复数值的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 表示。

Py_complex _Py_c_diff(Py_complex left, Py_complex right)

返回两个复数之间的差,使用 c Py_complex 表示。

Py_complex _Py_c_neg(Py_complex complex)

返回复数的负数 复杂的 ,使用C Py_complex 表示。

Py_complex _Py_c_prod(Py_complex left, Py_complex right)

返回两个复数的乘积,使用c Py_complex 表示。

Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)

返回两个复数的商,使用c Py_complex 表示。

如果 除数 为空,此方法返回零并设置 errnoEDOM .

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

返回的求幂 num 通过 exp ,使用C Py_complex 表示。

如果 num 是空的 exp 不是正实数,此方法返回零并设置 errnoEDOM .

作为python对象的复数

type PyComplexObject

这种子类型 PyObject 表示 Python 复数对象。

PyTypeObject PyComplex_Type

此实例 PyTypeObject 表示python复数类型。它与 complex 在python层中。

int PyComplex_Check(PyObject *p)

如果其参数为 PyComplexObject 或其子类型 PyComplexObject 。此功能总是成功的。

int PyComplex_CheckExact(PyObject *p)

如果其参数为 PyComplexObject ,但不是的子类型 PyComplexObject 。此功能总是成功的。

PyObject *PyComplex_FromCComplex(Py_complex v)
Return value: New reference.

从C创建新的python复数对象 Py_complex 价值。

PyObject *PyComplex_FromDoubles(double real, double imag)
Return value: New reference.

返回一个新的 PyComplexObject 对象从 realimag .

double PyComplex_RealAsDouble(PyObject *op)

返回的实际部分 op 作为一个C double .

double PyComplex_ImagAsDouble(PyObject *op)

返回的虚部 op 作为一个C double .

Py_complex PyComplex_AsCComplex(PyObject *op)

返回 Py_complex 复数的值 op .

如果 op 不是python复数对象,但具有 __complex__() 方法,首先调用此方法以转换 op 到python复数对象。如果 __complex__() 未定义,则返回到 __float__() . 如果 __float__() 未定义,则返回到 __index__() . 失败时,此方法返回 -1.0 作为一个真正的价值。

在 3.8 版更改: 使用 __index__() 如果有的话。