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.

double real
double imag

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 till EDOM.

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 till EDOM.

Sätt errno till ERANGE vid överskridanden.

Komplexa tal som Python-objekt

type PyComplexObject

Denna subtyp av PyObject representerar ett Python-objekt med komplexa tal.

PyTypeObject PyComplex_Type
En del av Stabil ABI.

Denna instans av PyTypeObject representerar Pythons komplexa taltyp. Det är samma objekt som complex i Python-lagret.

int PyComplex_Check(PyObject *p)

Returnerar true om dess argument är ett PyComplexObject eller en subtyp av PyComplexObject. Denna funktion lyckas alltid.

int PyComplex_CheckExact(PyObject *p)

Returnerar true om dess argument är ett PyComplexObject, men inte en subtyp av PyComplexObject. 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. Returnerar NULL 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. Returnerar NULL 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 anropa PyFloat_AsDouble() och returnerar dess resultat.

Om metoden misslyckas returnerar den -1.0 med en undantagsuppsättning, så man bör anropa PyErr_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 anropa PyFloat_AsDouble() och returnerar 0.0 vid framgång.

Om metoden misslyckas returnerar den -1.0 med en undantagsuppsättning, så man bör anropa PyErr_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 med real satt till -1.0 och med ett undantag satt, så man bör anropa PyErr_Occurred() för att kontrollera fel.

Ändrad i version 3.8: Använd __index__() om det finns tillgängligt.