Complex Number Objects

当从C API查看时,Python的复数对象被实现为两个不同类型:一个是暴露给Python程序的Python对象,另一个是表示实际复数值的C结构。API提供了与两者协同工作的功能。

Complex Numbers as C Structures

注意,接受这些结构作为参数并返回它们作为结果的函数通过值这样做,而不是通过指针来解引用它们。这在整个API中是一致的。

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表示法返回两个复数的商。

如果除数为null,则此方法返回零并将errno设置为EDOM

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

使用C Py_complex表示法返回num的乘幂exp

如果num为空且exp不是正实数,则此方法返回零并将errno设置为EDOM

Complex Numbers as Python Objects

PyComplexObject

PyObject的此子类型表示一个Python复数对象。

PyTypeObject PyComplex_Type

此实例PyTypeObject表示Python复数类型。它与Python层中的complex是同一个对象。

int PyComplex_Check(PyObject *p)

如果其参数为PyComplexObjectPyComplexObject的子类型,则返回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)
返回值:新引用。

真实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复数对象。失败时,此方法返回-1.0作为实数值。