Viên nang¶
Tham khảo Cung cấp C API cho Mô-đun mở rộng để biết thêm thông tin về cách sử dụng các đối tượng này.
Added in version 3.1.
-
type PyCapsule¶
Loại con này của
PyObjectđại diện cho một giá trị mờ, hữu ích cho các mô-đun mở rộng C cần chuyển một giá trị mờ (dưới dạng con trỏ void*) thông qua mã Python sang mã C khác. Nó thường được sử dụng để cung cấp một con trỏ hàm C được xác định trong một mô-đun cho các mô-đun khác, do đó, cơ chế nhập thông thường có thể được sử dụng để truy cập các API C được xác định trong các mô-đun được tải động.
-
PyTypeObject PyCapsule_Type¶
- Một phần của ABI ổn định.
Đối tượng loại tương ứng với đối tượng viên nang. Đây là đối tượng tương tự như
types.CapsuleTypetrong lớp Python.
-
type PyCapsule_Destructor¶
- Một phần của ABI ổn định.
Kiểu gọi lại hàm hủy cho một viên nang. Được xác định là:
khoảng trống typedef (*PyCapsule_Destructor)(PyObject *);
Xem
PyCapsule_New()để biết ngữ nghĩa của lệnh gọi lại PyCapsule_Destructor.
-
int PyCapsule_CheckExact(PyObject *p)¶
- Thread safety: Atomic.
Trả về true nếu đối số của nó là
PyCapsule. Chức năng này luôn thành công.
-
PyObject *PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định. Thread safety: Atomic.
Tạo một
PyCapsuleđóng gói pointer. Đối số pointer có thể không phải làNULL.Nếu thất bại, hãy đặt ngoại lệ và trả về
NULL.Chuỗi name có thể là
NULLhoặc một con trỏ tới chuỗi C hợp lệ. Nếu không phải làNULL, chuỗi này phải tồn tại lâu hơn trong hộp. (Mặc dù được phép giải phóng nó bên trong destructor.)Nếu đối số destructor không phải là
NULL, nó sẽ được gọi với viên nang làm đối số khi nó bị hủy.Nếu viên nang này sẽ được lưu trữ dưới dạng thuộc tính của mô-đun, thì name phải được chỉ định là
modulename.attributename. Điều này sẽ cho phép các mô-đun khác nhập viên nang bằngPyCapsule_Import().
-
void *PyCapsule_GetPointer(PyObject *capsule, const char *name)¶
- Một phần của ABI ổn định. Thread safety: Safe to call without external synchronization on distinct objects.
Lấy pointer được lưu trữ trong viên nang. Nếu thất bại, hãy đặt ngoại lệ và trả về
NULL.Tham số name phải so sánh chính xác với tên được lưu trong Capsule. Nếu tên được lưu trong hộp là
NULLthì name được chuyển vào cũng phải làNULL. Python sử dụng hàm Cstrcmp()để so sánh tên viên nang.
-
PyCapsule_Destructor PyCapsule_GetDestructor(PyObject *capsule)¶
- Một phần của ABI ổn định. Thread safety: Safe to call without external synchronization on distinct objects.
Trả về hàm hủy hiện tại được lưu trữ trong viên nang. Nếu thất bại, hãy đặt ngoại lệ và trả về
NULL.Việc một viên nang có bộ hủy
NULLlà hợp pháp. Điều này làm cho mã trả vềNULLhơi mơ hồ; sử dụngPyCapsule_IsValid()hoặcPyErr_Occurred()để phân biệt.
-
void *PyCapsule_GetContext(PyObject *capsule)¶
- Một phần của ABI ổn định. Thread safety: Safe to call without external synchronization on distinct objects.
Trả về bối cảnh hiện tại được lưu trữ trong viên nang. Nếu thất bại, hãy đặt ngoại lệ và trả về
NULL.Việc một viên nang có ngữ cảnh
NULLlà hợp pháp. Điều này làm cho mã trả vềNULLhơi mơ hồ; sử dụngPyCapsule_IsValid()hoặcPyErr_Occurred()để phân biệt.
-
const char *PyCapsule_GetName(PyObject *capsule)¶
- Một phần của ABI ổn định. Thread safety: Safe to call without external synchronization on distinct objects.
Trả lại tên hiện tại được lưu trong viên nang. Nếu thất bại, hãy đặt ngoại lệ và trả về
NULL.Việc một viên nang có tên
NULLlà hợp pháp. Điều này làm cho mã trả vềNULLhơi mơ hồ; sử dụngPyCapsule_IsValid()hoặcPyErr_Occurred()để phân biệt.
-
void *PyCapsule_Import(const char *name, int no_block)¶
- Một phần của ABI ổn định. Thread safety: Safe to call from multiple threads with external synchronization only.
Nhập con trỏ tới đối tượng C từ thuộc tính Capsule trong mô-đun. Tham số name phải chỉ định tên đầy đủ cho thuộc tính, như trong
module.attribute. Zz002zz được lưu trữ trong viên nang phải khớp chính xác với chuỗi này.Hàm này tách name trên ký tự
.và nhập phần tử đầu tiên. Sau đó nó xử lý các phần tử tiếp theo bằng cách sử dụng tra cứu thuộc tính.Trả lại pointer bên trong của viên nang thành công. Nếu thất bại, hãy đặt ngoại lệ và trả về
NULL.Ghi chú
Nếu name trỏ đến một thuộc tính của một số mô hình con hoặc gói con, thì mô hình con hoặc gói con này trước đó phải được nhập bằng các phương tiện khác (ví dụ: bằng cách sử dụng
PyImport_ImportModule()) để việc tra cứu thuộc tính thành công.Thay đổi trong phiên bản 3.3: no_block không còn tác dụng nữa.
-
int PyCapsule_IsValid(PyObject *capsule, const char *name)¶
- Một phần của ABI ổn định. Thread safety: Safe to call without external synchronization on distinct objects.
Xác định xem capsule có phải là viên nang hợp lệ hay không. Một viên hợp lệ không phải là
NULL, vượt quaPyCapsule_CheckExact(), có một con trỏ không phảiNULLđược lưu trữ trong đó và tên bên trong của nó khớp với tham số name. (XemPyCapsule_GetPointer()để biết thông tin về cách so sánh tên viên nang.)Nói cách khác, nếu
PyCapsule_IsValid()trả về giá trị thực, các lệnh gọi tới bất kỳ trình truy cập nào (bất kỳ hàm nào bắt đầu bằngPyCapsule_Get) đều được đảm bảo thành công.Trả về giá trị khác 0 nếu đối tượng hợp lệ và khớp với tên được truyền vào. Ngược lại, trả về
0. Chức năng này sẽ không thất bại.
-
int PyCapsule_SetContext(PyObject *capsule, void *context)¶
- Một phần của ABI ổn định. Thread safety: Safe to call without external synchronization on distinct objects.
Đặt con trỏ ngữ cảnh bên trong capsule thành context.
Trả về
0khi thành công. Trả về giá trị khác 0 và đặt ngoại lệ khi thất bại.
-
int PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor)¶
- Một phần của ABI ổn định. Thread safety: Safe to call without external synchronization on distinct objects.
Đặt hàm hủy bên trong capsule thành destructor.
Trả về
0khi thành công. Trả về giá trị khác 0 và đặt ngoại lệ khi thất bại.
-
int PyCapsule_SetName(PyObject *capsule, const char *name)¶
- Một phần của ABI ổn định. Thread safety: Safe to call without external synchronization on distinct objects.
Đặt tên bên trong capsule thành name. Nếu không phải là
NULL, tên đó phải tồn tại lâu hơn trong hộp. Nếu name trước đó được lưu trữ trong viên nang không phải làNULLthì sẽ không có nỗ lực nào để giải phóng nó.Trả về
0khi thành công. Trả về giá trị khác 0 và đặt ngoại lệ khi thất bại.
-
int PyCapsule_SetPointer(PyObject *capsule, void *pointer)¶
- Một phần của ABI ổn định. Thread safety: Safe to call without external synchronization on distinct objects.
Đặt con trỏ void bên trong capsule thành pointer. Con trỏ có thể không phải là
NULL.Trả về
0khi thành công. Trả về giá trị khác 0 và đặt ngoại lệ khi thất bại.