Объекты комплексных чисел¶
Объекты комплексных чисел в Python реализованы как два разных типа, если смотреть на них через C API: один - это объект Python, доступный для Python-программ, а другой - структура C, которая представляет фактическое значение комплексного числа. API предоставляет функции для работы с обоими типами.
Комплексные числа как структуры языка C¶
Обратите внимание, что функции, которые принимают эти структуры в качестве параметров и возвращают их в качестве результатов, делают это по значению, а не разыменовывают их через указатели. Это единообразно для всего API.
-
type Py_complex¶
Структура на языке C, соответствующая части значений объекта комплексного числа в Python. Большинство функций для работы с объектами комплексных чисел используют структуры этого типа в качестве входных или выходных значений, в зависимости от ситуации. Она определяется следующим образом:
typedef struct { double real; double imag; } Py_complex;
-
Py_complex _Py_c_sum(Py_complex left, Py_complex right)¶
Возвращает сумму двух комплексных чисел, используя представление C
Py_complex
.
-
Py_complex _Py_c_diff(Py_complex left, Py_complex right)¶
Возвращает разность двух комплексных чисел, используя представление C
Py_complex
.
-
Py_complex _Py_c_neg(Py_complex num)¶
Возвращает отрицание комплексного числа num, используя представление C
Py_complex
.
-
Py_complex _Py_c_prod(Py_complex left, Py_complex right)¶
Возвращает произведение двух комплексных чисел, используя представление C
Py_complex
.
-
Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)¶
Возвращает коциент двух комплексных чисел, используя представление C
Py_complex
.Если divisor равен null, этот метод возвращает ноль и устанавливает
errno
вEDOM
.
-
Py_complex _Py_c_pow(Py_complex num, Py_complex exp)¶
Возвращает экспоненцию num на exp, используя представление C
Py_complex
.Если num равно null, а exp не является положительным вещественным числом, этот метод возвращает ноль и устанавливает
errno
вEDOM
.
Комплексные числа как объекты Python¶
-
PyTypeObject PyComplex_Type¶
- Часть Стабильный ABI.
Этот экземпляр
PyTypeObject
представляет тип комплексного числа Python. Это тот же объект, что иcomplex
в слое Python.
-
int PyComplex_Check(PyObject *p)¶
Возвращает true, если его аргумент является
PyComplexObject
или подтипомPyComplexObject
. Эта функция всегда успешна.
-
int PyComplex_CheckExact(PyObject *p)¶
Возвращает true, если его аргумент является
PyComplexObject
, но не является подтипомPyComplexObject
. Эта функция всегда успешна.
-
PyObject *PyComplex_FromCComplex(Py_complex v)¶
- Возвращаемое значение: Новая ссылка.
Создайте новый объект комплексного числа Python из значения C
Py_complex
.
-
PyObject *PyComplex_FromDoubles(double real, double imag)¶
- Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.
Возвращает новый объект
PyComplexObject
из real и imag.
-
double PyComplex_RealAsDouble(PyObject *op)¶
- Часть Стабильный ABI.
Возвращает вещественную часть op в виде C double.
Если op не является объектом комплексного числа Python, но имеет метод
__complex__()
, то сначала будет вызван этот метод для преобразования op в объект комплексного числа Python. Если__complex__()
не определен, то он возвращается к вызовуPyFloat_AsDouble()
и возвращает его результат. В случае неудачи метод возвращает-1.0
, поэтому для проверки ошибок следует вызватьPyErr_Occurred()
.Изменено в версии 3.13: Используйте
__complex__()
, если он доступен.
-
double PyComplex_ImagAsDouble(PyObject *op)¶
- Часть Стабильный ABI.
Возвращает мнимую часть op в виде C double.
Если op не является объектом комплексного числа Python, но имеет метод
__complex__()
, то сначала будет вызван этот метод для преобразования op в объект комплексного числа Python. Если__complex__()
не определен, то он возвращается к вызовуPyFloat_AsDouble()
и возвращает0.0
в случае успеха. В случае неудачи метод возвращает-1.0
, поэтому для проверки ошибок следует вызватьPyErr_Occurred()
.Изменено в версии 3.13: Используйте
__complex__()
, если он доступен.
-
Py_complex PyComplex_AsCComplex(PyObject *op)¶
Возвращает значение
Py_complex
комплексного числа op.Если op не является объектом комплексного числа Python, но имеет метод
__complex__()
, то сначала будет вызван этот метод для преобразования op в объект комплексного числа Python. Если метод__complex__()
не определен, то он возвращается к__float__()
. Если__float__()
не определено, то происходит возврат к__index__()
. В случае неудачи метод возвращает-1.0
как вещественное значение.Изменено в версии 3.8: Используйте
__index__()
, если он доступен.