Objekt för komplexa tal¶
Pythons komplexa talobjekt implementeras som två olika typer när de betraktas från C API: en är Python-objektet som exponeras för Python-program, och den andra är en C-struktur som representerar det faktiska komplexa talvärdet. API:et tillhandahåller funktioner för att arbeta med båda.
Komplexa tal som C-strukturer¶
Observera att de funktioner som accepterar dessa strukturer som parametrar och returnerar dem som resultat gör det med värde i stället för att dereferencera dem via pekare. Detta är konsekvent i hela API:et.
-
type Py_complex¶
Den C-struktur som motsvarar värdedelen av ett Python-objekt med komplexa tal. De flesta funktioner för att hantera komplexa talobjekt använder strukturer av denna typ som in- eller utvärden, beroende på vad som är lämpligt.
Strukturen definieras som:
typedef struct { dubbel real; dubbel imag; } Py_complex;
-
Py_complex _Py_c_sum(Py_complex left, Py_complex right)¶
Returnerar summan av två komplexa tal, med C
Py_complex
-representationen.
-
Py_complex _Py_c_diff(Py_complex left, Py_complex right)¶
Returnerar skillnaden mellan två komplexa tal, med C
Py_complex
-representationen.
-
Py_complex _Py_c_neg(Py_complex num)¶
Returnerar negationen av det komplexa talet num, med C
Py_complex
-representationen.
-
Py_complex _Py_c_prod(Py_complex left, Py_complex right)¶
Returnerar produkten av två komplexa tal, med C
Py_complex
-representationen.
-
Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)¶
Returnerar kvoten av två komplexa tal, med C
Py_complex
-representationen.Om divisor är null, returnerar denna metod noll och sätter
errno
tillEDOM
.
-
Py_complex _Py_c_pow(Py_complex num, Py_complex exp)¶
Returnerar exponentiering av num med exp, med C
Py_complex
-representationen.Om num är null och exp inte är ett positivt reellt tal, returnerar denna metod noll och sätter
errno
tillEDOM
.Sätt
errno
tillERANGE
vid överskridanden.
Komplexa tal som Python-objekt¶
-
PyTypeObject PyComplex_Type¶
- En del av Stabil ABI.
Denna instans av
PyTypeObject
representerar Pythons komplexa taltyp. Det är samma objekt somcomplex
i Python-lagret.
-
int PyComplex_Check(PyObject *p)¶
Returnerar true om dess argument är ett
PyComplexObject
eller en subtyp avPyComplexObject
. Denna funktion lyckas alltid.
-
int PyComplex_CheckExact(PyObject *p)¶
Returnerar true om dess argument är ett
PyComplexObject
, men inte en subtyp avPyComplexObject
. Denna funktion lyckas alltid.
-
PyObject *PyComplex_FromCComplex(Py_complex v)¶
- Returnera värde: Ny referens.
Skapar ett nytt Python-komplext talobjekt från ett C
Py_complex
-värde. ReturnerarNULL
med en undantagsuppsättning vid fel.
-
PyObject *PyComplex_FromDoubles(double real, double imag)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Returnerar ett nytt
PyComplexObject
-objekt från real och imag. ReturnerarNULL
med en undantagsuppsättning vid fel.
-
double PyComplex_RealAsDouble(PyObject *op)¶
- En del av Stabil ABI.
Returnera den reella delen av op som en C double.
Om op inte är ett Python-objekt för komplexa tal men har en
__complex__()
-metod, kommer denna metod först att anropas för att konvertera op till ett Python-objekt för komplexa tal. Om__complex__()
inte är definierad så faller den tillbaka till att anropaPyFloat_AsDouble()
och returnerar dess resultat.Om metoden misslyckas returnerar den
-1.0
med en undantagsuppsättning, så man bör anropaPyErr_Occurred()
för att kontrollera om det finns fel.Ändrad i version 3.13: Använd
__complex__()
om det finns tillgängligt.
-
double PyComplex_ImagAsDouble(PyObject *op)¶
- En del av Stabil ABI.
Returnera imaginärdelen av op som en C double.
Om op inte är ett Python-objekt för komplexa tal men har en
__complex__()
-metod, kommer denna metod först att anropas för att konvertera op till ett Python-objekt för komplexa tal. Om__complex__()
inte är definierad så faller den tillbaka till att anropaPyFloat_AsDouble()
och returnerar0.0
vid framgång.Om metoden misslyckas returnerar den
-1.0
med en undantagsuppsättning, så man bör anropaPyErr_Occurred()
för att kontrollera om det finns fel.Ändrad i version 3.13: Använd
__complex__()
om det finns tillgängligt.
-
Py_complex PyComplex_AsCComplex(PyObject *op)¶
Returnera
Py_complex
-värdet för det komplexa talet op.Om op inte är ett Python-komplextalsobjekt men har en
__complex__()
-metod, kommer denna metod först att anropas för att konvertera op till ett Python-komplextalsobjekt. Om__complex__()
inte är definierad faller den tillbaka till__float__()
. Om__float__()
inte är definierat så faller det tillbaka på__index__()
.Vid misslyckande returnerar denna metod
Py_complex
medreal
satt till-1.0
och med ett undantag satt, så man bör anropaPyErr_Occurred()
för att kontrollera fel.Ändrad i version 3.8: Använd
__index__()
om det finns tillgängligt.