Đối tượng số phức¶
Các đối tượng số phức của Python được triển khai thành hai loại riêng biệt khi xem từ C API: một là đối tượng Python được hiển thị với các chương trình Python và loại kia là cấu trúc C đại diện cho giá trị số phức thực tế. Zz001zz cung cấp các chức năng để làm việc với cả hai.
Số phức dưới dạng cấu trúc C¶
Lưu ý rằng các hàm chấp nhận các cấu trúc này làm tham số và trả về chúng dưới dạng kết quả sẽ làm như vậy by value thay vì hủy tham chiếu chúng thông qua con trỏ. Điều này nhất quán trong suốt API.
-
type Py_complex¶
Cấu trúc C tương ứng với phần giá trị của đối tượng số phức Python. Hầu hết các hàm xử lý các đối tượng số phức đều sử dụng các cấu trúc thuộc loại này làm giá trị đầu vào hoặc đầu ra, nếu thích hợp.
Cấu trúc được định nghĩa là:
cấu trúc typedef { thực gấp đôi; hình ảnh kép; } Py_complex;
-
Py_complex _Py_c_sum(Py_complex left, Py_complex right)¶
Trả về tổng của hai số phức, sử dụng biểu diễn C
Py_complex.
-
Py_complex _Py_c_diff(Py_complex left, Py_complex right)¶
Trả về hiệu giữa hai số phức, sử dụng biểu diễn C
Py_complex.
-
Py_complex _Py_c_neg(Py_complex num)¶
Trả về số âm của số phức num, sử dụng biểu diễn C
Py_complex.
-
Py_complex _Py_c_prod(Py_complex left, Py_complex right)¶
Trả về tích của hai số phức, sử dụng biểu diễn C
Py_complex.
-
Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)¶
Trả về thương số của hai số phức, sử dụng biểu diễn C
Py_complex.Nếu divisor là null, phương thức này trả về 0 và đặt
errnothànhEDOM.
-
Py_complex _Py_c_pow(Py_complex num, Py_complex exp)¶
Trả về số mũ của num theo exp, sử dụng biểu diễn C
Py_complex.Nếu num là null và exp không phải là số thực dương thì phương thức này trả về 0 và đặt
errnothànhEDOM.Đặt
errnothànhERANGEkhi tràn.
Số phức dưới dạng đối tượng Python¶
-
PyTypeObject PyComplex_Type¶
- Một phần của ABI ổn định.
Phiên bản
PyTypeObjectnày đại diện cho kiểu số phức Python. Nó là đối tượng tương tự nhưcomplextrong lớp Python.
-
int PyComplex_Check(PyObject *p)¶
Trả về true nếu đối số của nó là
PyComplexObjecthoặc kiểu con củaPyComplexObject. Chức năng này luôn thành công.
-
int PyComplex_CheckExact(PyObject *p)¶
Trả về true nếu đối số của nó là
PyComplexObjectnhưng không phải là kiểu con củaPyComplexObject. Chức năng này luôn thành công.
-
PyObject *PyComplex_FromCComplex(Py_complex v)¶
- Giá trị trả về: Tham chiếu mới.
Tạo một đối tượng số phức Python mới từ giá trị C
Py_complex. Trả vềNULLvới lỗi ngoại lệ được đặt.
-
PyObject *PyComplex_FromDoubles(double real, double imag)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Trả về một đối tượng
PyComplexObjectmới từ real và imag. Trả vềNULLvới lỗi ngoại lệ được đặt.
-
double PyComplex_RealAsDouble(PyObject *op)¶
- Một phần của ABI ổn định.
Trả lại phần thực của op dưới dạng C double.
Nếu op không phải là đối tượng số phức Python nhưng có phương thức
__complex__(), thì trước tiên, phương thức này sẽ được gọi để chuyển đổi op thành đối tượng số phức Python. Nếu__complex__()không được xác định thì nó sẽ quay lại gọiPyFloat_AsDouble()và trả về kết quả của nó.Khi thất bại, phương thức này trả về
-1.0với một bộ ngoại lệ, vì vậy người ta nên gọiPyErr_Occurred()để kiểm tra lỗi.Thay đổi trong phiên bản 3.13: Sử dụng
__complex__()nếu có.
-
double PyComplex_ImagAsDouble(PyObject *op)¶
- Một phần của ABI ổn định.
Trả về phần ảo của op dưới dạng C double.
Nếu op không phải là đối tượng số phức Python nhưng có phương thức
__complex__(), thì trước tiên, phương thức này sẽ được gọi để chuyển đổi op thành đối tượng số phức Python. Nếu__complex__()không được xác định thì nó sẽ quay lại gọiPyFloat_AsDouble()và trả về0.0nếu thành công.Khi thất bại, phương thức này trả về
-1.0với một bộ ngoại lệ, vì vậy người ta nên gọiPyErr_Occurred()để kiểm tra lỗi.Thay đổi trong phiên bản 3.13: Sử dụng
__complex__()nếu có.
-
Py_complex PyComplex_AsCComplex(PyObject *op)¶
Trả về giá trị
Py_complexcủa số phức op.Nếu op không phải là đối tượng số phức Python nhưng có phương thức
__complex__(), thì trước tiên, phương thức này sẽ được gọi để chuyển đổi op thành đối tượng số phức Python. Nếu__complex__()không được xác định thì nó sẽ quay trở lại__float__(). Nếu__float__()không được xác định thì nó sẽ quay trở lại__index__().Khi thất bại, phương thức này trả về
Py_complexvớirealđược đặt thành-1.0và với một bộ ngoại lệ, vì vậy người ta nên gọiPyErr_Occurred()để kiểm tra lỗi.Thay đổi trong phiên bản 3.8: Sử dụng
__index__()nếu có.