复数对象

从 C API 看,Python 的复数对象被实现为两种不同的类型:一种是暴露给 Python 程序的 Python 对象,另一种是代表实际复数值的 C 结构。该 API 提供了可同时使用两者的Function。

复数作为 C 结构

注意,接受这些结构作为参数并返回它们作为结果的函数这样做是“按值” *,而不是pass指针对其进行反引用。这在整个 API 中都是一致的。

  • Py_complex
    • 对应于 Python 复数对象的值部分的 C 结构。大多数处理复数对象的Function都视情况使用此类型的结构作为 Importing 或输出值。它定义为:
typedef struct {
   double real;
   double imag;
} Py_complex;

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

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

复数作为 Python 对象

在版本 2.2 中更改:接受允许的子类型。

2.2 版中的新Function。

从 C Py_complex值创建一个新的 Python 复数对象。

  • PyObject * PyComplex_FromDoubles(double * real *,double * imag *)
    • 返回值:新参考.

从* real imag *返回一个新的PyComplexObject对象。

  • PyComplex_RealAsDouble(PyObject ** op *)

    • 将* op *的实数部分返回为 C double
  • PyComplex_ImagAsDouble(PyObject ** op *)

    • 将* op *的虚部作为 C double返回。
  • Py_complex PyComplex_AsCComplex(PyObject ** op *)

    • 返回复数* op *的Py_complex值。失败时,此方法将返回-1.0作为实际值。

在 2.6 版中进行了更改:如果* op 不是 Python 复数对象,但是具有complex()方法,则将首先调用此方法以将 op *转换为 Python 复数对象。