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.
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
errnoaufEDOM.
-
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
errnoaufEDOM.Setzt
errnoaufERANGEbei Überläufen.
Komplexe Zahlen als Python-Objekte¶
-
PyTypeObject PyComplex_Type¶
- Teil der Stable ABI.
Diese Instanz von
PyTypeObjectrepräsentiert den Python-Typ für komplexe Zahlen. Es ist dasselbe Objekt wiecomplexauf der Python-Ebene.
-
int PyComplex_Check(PyObject *p)¶
Gibt wahr zurück, wenn das Argument ein
PyComplexObjectoder eine Unterklasse vonPyComplexObjectist. Diese Funktion ist immer erfolgreich.
-
int PyComplex_CheckExact(PyObject *p)¶
Gibt wahr zurück, wenn das Argument ein
PyComplexObject, aber keine Unterklasse vonPyComplexObjectist. 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. GibtNULLzurü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. GibtNULLzurü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 stattdessenPyFloat_AsDouble()aufgerufen und dessen Ergebnis zurückgegeben.Im Fehlerfall gibt diese Methode
-1.0zurück und setzt eine Ausnahme. Man sollte daherPyErr_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 stattdessenPyFloat_AsDouble()aufgerufen und im Erfolgsfall0.0zurückgegeben.Im Fehlerfall gibt diese Methode
-1.0zurück und setzt eine Ausnahme. Man sollte daherPyErr_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_complexmitrealauf-1.0gesetzt zurück und setzt eine Ausnahme. Man sollte daherPyErr_Occurred()aufrufen, um auf Fehler zu prüfen.Geändert in Version 3.8: Verwendet
__index__(), falls verfügbar.