Объекты комплексных чисел
С точки зрения C API комплексные числа Python реализованы в виде двух различных типов: один — это объект Python, доступный программам на Python, а другой — структура C, представляющая фактическое значение комплексного числа. API предоставляет функции для работы с обоими типами.
Комплексные числа в виде структур C
Обратите внимание, что функции, принимающие такие структуры в качестве параметров и возвращающие их в качестве результатов, делают это по значению, а не разыменовывая их через указатели. Это правило соблюдается во всём API.
-
type Py_complex -
Структура C, соответствующая части значения объекта комплексного числа Python. Большинство функций для работы с объектами комплексных чисел используют структуры этого типа в качестве входных или выходных значений, в зависимости от ситуации.
-
double real -
double imag
Структура определена следующим образом:
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.При переполнении устанавливает
errnoвERANGE.
Комплексные числа в виде объектов Python
-
type PyComplexObject -
Этот подтип
PyObjectпредставляет объект комплексного числа Python.
-
PyTypeObject PyComplex_Type -
Часть стабильного ABI.
Этот экземпляр
PyTypeObjectпредставляет тип комплексных чисел Python. На уровне Python это тот же объект, что иcomplex.
-
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. При ошибке возвращаетNULLи устанавливает исключение.
-
PyObject *PyComplex_FromDoubles(double real, double imag) -
Возвращаемое значение: новая ссылка. Часть стабильного ABI.
Возвращает новый объект
PyComplexObject, созданный из real и imag. При ошибке возвращаетNULLи устанавливает исключение.
-
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__().В случае ошибки этот метод возвращает
Py_complexсо значением-1.0вrealи установленным исключением, поэтому для проверки наличия ошибок следует вызватьPyErr_Occurred().Изменено в версии 3.8: Используется
__index__(), если он доступен.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/c-api/complex.html