Komplexe Zahlenobjekte

Pythons komplexe Zahlenobjekte werden in der C-API als zwei verschiedene Typen implementiert: der eine ist das Python-Objekt, das Python-Programmen zur Verfügung steht, und der andere ist eine C-Struktur, die den tatsächlichen komplexen Zahlenwert repräsentiert. Die API bietet Funktionen für die Arbeit mit beiden.

Komplexe Zahlen als C-Strukturen

Beachten Sie, dass die Funktionen, die diese Strukturen als Parameter akzeptieren und als Ergebnisse zurückgeben, dies *wertweise* tun und nicht über Zeiger dereferenzieren. Dies ist durchgängig in der API.

type Py_complex

Die C-Struktur, die dem Wertteil eines Python-komplexen Zahlenobjekts entspricht. Die meisten Funktionen zur Handhabung von komplexen Zahlenobjekten verwenden Strukturen dieses Typs als Ein- oder Ausgabewerte, je nach Bedarf.

double real
double imag

Die Struktur ist wie folgt definiert:

typedef struct {
    double real;
    double imag;
} Py_complex;
Py_complex _Py_c_sum(Py_complex left, Py_complex right)

Gibt die Summe zweier komplexer Zahlen zurück, unter Verwendung der C Py_complex-Darstellung.

Py_complex _Py_c_diff(Py_complex left, Py_complex right)

Gibt die Differenz zwischen zwei komplexen Zahlen zurück, unter Verwendung der C Py_complex-Darstellung.

Py_complex _Py_c_neg(Py_complex num)

Gibt die Negation der komplexen Zahl num zurück, unter Verwendung der C Py_complex-Darstellung.

Py_complex _Py_c_prod(Py_complex left, Py_complex right)

Gibt das Produkt zweier komplexer Zahlen zurück, unter Verwendung der C Py_complex-Darstellung.

Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)

Gibt den Quotienten zweier komplexer Zahlen zurück, unter Verwendung der C Py_complex-Darstellung.

Wenn divisor null ist, gibt diese Methode null zurück und setzt errno auf EDOM.

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

Gibt die Potenzierung von num mit exp zurück, unter Verwendung der C Py_complex-Darstellung.

Wenn num null ist und exp keine positive reelle Zahl ist, gibt diese Methode null zurück und setzt errno auf EDOM.

Setzt errno auf ERANGE bei Überläufen.

Komplexe Zahlen als Python-Objekte

type PyComplexObject

Dieser Untertyp von PyObject repräsentiert ein Python-komplexes Zahlenobjekt.

PyTypeObject PyComplex_Type
Teil der Stable ABI.

Diese Instanz von PyTypeObject repräsentiert den Python-Typ für komplexe Zahlen. Es ist dasselbe Objekt wie complex auf der Python-Ebene.

int PyComplex_Check(PyObject *p)

Gibt wahr zurück, wenn das Argument ein PyComplexObject oder eine Unterklasse von PyComplexObject ist. Diese Funktion ist immer erfolgreich.

int PyComplex_CheckExact(PyObject *p)

Gibt wahr zurück, wenn das Argument ein PyComplexObject, aber keine Unterklasse von PyComplexObject ist. Diese Funktion ist immer erfolgreich.

PyObject *PyComplex_FromCComplex(Py_complex v)
Rückgabewert: Neue Referenz.

Erstellt ein neues Python-komplexes Zahlenobjekt aus einem C Py_complex-Wert. Gibt NULL zurück und setzt eine Ausnahme bei einem Fehler.

PyObject *PyComplex_FromDoubles(double real, double imag)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Gibt ein neues PyComplexObject-Objekt aus real und imag zurück. Gibt NULL zurück und setzt eine Ausnahme bei einem Fehler.

double PyComplex_RealAsDouble(PyObject *op)
Teil der Stable ABI.

Gibt den Realteil von op als C double zurück.

Wenn op kein Python-komplexes Zahlenobjekt ist, aber eine __complex__()-Methode hat, wird diese Methode zuerst aufgerufen, um op in ein Python-komplexes Zahlenobjekt umzuwandeln. Wenn __complex__() nicht definiert ist, wird stattdessen PyFloat_AsDouble() aufgerufen und dessen Ergebnis zurückgegeben.

Im Fehlerfall gibt diese Methode -1.0 zurück und setzt eine Ausnahme. Man sollte daher PyErr_Occurred() aufrufen, um auf Fehler zu prüfen.

Geändert in Version 3.13: Verwendet __complex__(), falls verfügbar.

double PyComplex_ImagAsDouble(PyObject *op)
Teil der Stable ABI.

Gibt den Imaginärteil von op als C double zurück.

Wenn op kein Python-komplexes Zahlenobjekt ist, aber eine __complex__()-Methode hat, wird diese Methode zuerst aufgerufen, um op in ein Python-komplexes Zahlenobjekt umzuwandeln. Wenn __complex__() nicht definiert ist, wird stattdessen PyFloat_AsDouble() aufgerufen und im Erfolgsfall 0.0 zurückgegeben.

Im Fehlerfall gibt diese Methode -1.0 zurück und setzt eine Ausnahme. Man sollte daher PyErr_Occurred() aufrufen, um auf Fehler zu prüfen.

Geändert in Version 3.13: Verwendet __complex__(), falls verfügbar.

Py_complex PyComplex_AsCComplex(PyObject *op)

Gibt den Py_complex-Wert der komplexen Zahl op zurück.

Wenn op kein Python-komplexes Zahlenobjekt ist, aber eine __complex__()-Methode hat, wird diese Methode zuerst aufgerufen, um op in ein Python-komplexes Zahlenobjekt umzuwandeln. Wenn __complex__() nicht definiert ist, wird stattdessen auf __float__() zurückgegriffen. Wenn __float__() nicht definiert ist, wird stattdessen auf __index__() zurückgegriffen.

Im Fehlerfall gibt diese Methode Py_complex mit real auf -1.0 gesetzt zurück und setzt eine Ausnahme. Man sollte daher PyErr_Occurred() aufrufen, um auf Fehler zu prüfen.

Geändert in Version 3.8: Verwendet __index__(), falls verfügbar.