Đặt đối tượng¶
Phần này trình bày chi tiết về API công khai cho các đối tượng set và frozenset. Mọi chức năng không được liệt kê bên dưới đều có thể truy cập tốt nhất bằng giao thức đối tượng trừu tượng (bao gồm PyObject_CallMethod(), PyObject_RichCompareBool(), PyObject_Hash(), PyObject_Repr(), PyObject_IsTrue(), PyObject_Print() và PyObject_GetIter()) hoặc giao thức số trừu tượng (bao gồm PyNumber_And(), PyNumber_Subtract(), PyNumber_Or(), PyNumber_Xor(), PyNumber_InPlaceAnd(), PyNumber_InPlaceSubtract(), PyNumber_InPlaceOr() và PyNumber_InPlaceXor()).
-
type PySetObject¶
Loại con này của
PyObjectđược sử dụng để chứa dữ liệu nội bộ cho cả đối tượngsetvàfrozenset. Nó giống nhưPyDictObjectở chỗ nó có kích thước cố định cho các tập hợp nhỏ (giống như lưu trữ bộ dữ liệu) và sẽ trỏ đến một khối bộ nhớ có kích thước thay đổi, riêng biệt cho các tập hợp có kích thước trung bình và lớn (giống như lưu trữ danh sách). Không có trường nào trong cấu trúc này được coi là công khai và tất cả đều có thể thay đổi. Tất cả quyền truy cập phải được thực hiện thông qua API được ghi lại thay vì bằng cách thao tác các giá trị trong cấu trúc.
-
PyTypeObject PySet_Type¶
- Một phần của ABI ổn định.
Đây là một phiên bản của
PyTypeObjectđại diện cho loạisetcủa Python.
-
PyTypeObject PyFrozenSet_Type¶
- Một phần của ABI ổn định.
Đây là một phiên bản của
PyTypeObjectđại diện cho loạifrozensetcủa Python.
Các macro kiểm tra loại sau đây hoạt động trên các con trỏ tới bất kỳ đối tượng Python nào. Tương tự như vậy, các hàm xây dựng hoạt động với bất kỳ đối tượng Python có thể lặp lại nào.
-
int PySet_Check(PyObject *p)¶
Trả về true nếu p là đối tượng
sethoặc một phiên bản của kiểu con. Chức năng này luôn thành công.
-
int PyFrozenSet_Check(PyObject *p)¶
Trả về true nếu p là đối tượng
frozensethoặc một phiên bản của kiểu con. Chức năng này luôn thành công.
-
int PyAnySet_Check(PyObject *p)¶
Trả về true nếu p là một đối tượng
set, một đối tượngfrozensethoặc một phiên bản của một kiểu con. Chức năng này luôn thành công.
-
int PySet_CheckExact(PyObject *p)¶
Trả về true nếu p là đối tượng
setnhưng không phải là phiên bản của kiểu con. Chức năng này luôn thành công.Added in version 3.10.
-
int PyAnySet_CheckExact(PyObject *p)¶
Trả về true nếu p là đối tượng
sethoặc đối tượngfrozensetnhưng không phải là phiên bản của kiểu con. Chức năng này luôn thành công.
-
int PyFrozenSet_CheckExact(PyObject *p)¶
Trả về true nếu p là đối tượng
frozensetnhưng không phải là phiên bản của kiểu con. Chức năng này luôn thành công.
-
PyObject *PySet_New(PyObject *iterable)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định. Thread safety: Safe for concurrent use on the same object.
Trả về một
setmới chứa các đối tượng được iterable trả về. Zz006zz có thể làNULLđể tạo một tập hợp trống mới. Trả lại bộ mới nếu thành công hoặcNULLnếu thất bại. TăngTypeErrornếu iterable thực sự không thể lặp lại được. Hàm tạo cũng hữu ích để sao chép một tập hợp (c=set(s)).Ghi chú
Hoạt động là nguyên tử trên free threading khi iterable là
set,frozensethoặcdict.
-
PyObject *PyFrozenSet_New(PyObject *iterable)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định. Thread safety: Safe for concurrent use on the same object.
Trả về một
frozensetmới chứa các đối tượng được iterable trả về. Zz005zz có thể làNULLđể tạo một tập hợp đông lạnh trống mới. Trả lại bộ mới nếu thành công hoặcNULLnếu thất bại. TăngTypeErrornếu iterable thực sự không thể lặp lại được.Ghi chú
Hoạt động là nguyên tử trên free threading khi iterable là
set,frozensethoặcdict.
Các hàm và macro sau đây có sẵn cho các phiên bản set hoặc frozenset hoặc các phiên bản thuộc kiểu con của chúng.
-
Py_ssize_t PySet_Size(PyObject *anyset)¶
- Một phần của ABI ổn định. Thread safety: Atomic.
Trả về độ dài của đối tượng
sethoặcfrozenset. Tương đương vớilen(anyset). TăngSystemErrornếu anyset không phải làset,frozensethoặc một phiên bản của một kiểu con.
-
Py_ssize_t PySet_GET_SIZE(PyObject *anyset)¶
- Thread safety: Atomic.
Dạng macro của
PySet_Size()không kiểm tra lỗi.
-
int PySet_Contains(PyObject *anyset, PyObject *key)¶
- Một phần của ABI ổn định. Thread safety: Safe for concurrent use on the same object.
Trả về
1nếu tìm thấy,0nếu không tìm thấy và-1nếu gặp lỗi. Không giống như phương thức__contains__()của Python, hàm này không tự động chuyển đổi các tập hợp không thể băm thành các tập hợp bị đóng băng tạm thời. TăngTypeErrornếu key không thể băm được. TăngSystemErrornếu anyset không phải làset,frozensethoặc một phiên bản của một kiểu con.
-
int PySet_Add(PyObject *set, PyObject *key)¶
- Một phần của ABI ổn định. Thread safety: Safe for concurrent use on the same object.
Thêm key vào phiên bản
set. Cũng hoạt động với các phiên bảnfrozenset(nhưPyTuple_SetItem(), nó có thể được sử dụng để điền vào các giá trị của các tập hợp đông lạnh hoàn toàn mới trước khi chúng tiếp xúc với mã khác). Trả về0nếu thành công hoặc-1nếu thất bại. TăngTypeErrornếu key không thể băm được. TăngMemoryErrornếu không còn chỗ để phát triển. TăngSystemErrornếu set không phải là phiên bản củasethoặc kiểu con của nó.
Các chức năng sau đây có sẵn cho các phiên bản của set hoặc các kiểu con của nó nhưng không có sẵn cho các phiên bản của frozenset hoặc các kiểu con của nó.
-
int PySet_Discard(PyObject *set, PyObject *key)¶
- Một phần của ABI ổn định. Thread safety: Safe for concurrent use on the same object.
Trả về
1nếu tìm thấy và xóa,0nếu không tìm thấy (không thực hiện hành động nào) và-1nếu gặp lỗi. Không tăngKeyErrorkhi thiếu phím. TăngTypeErrornếu key không thể băm được. Không giống như phương thứcdiscard()của Python, hàm này không tự động chuyển đổi các tập hợp không thể băm thành các tập hợp bị đóng băng tạm thời. TăngSystemErrornếu set không phải là một phiên bản củasethoặc kiểu con của nó.
-
PyObject *PySet_Pop(PyObject *set)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định. Thread safety: Atomic.
Trả về một tham chiếu mới cho một đối tượng tùy ý trong set và xóa đối tượng khỏi set. Trả về
NULLkhi thất bại. TăngKeyErrornếu bộ trống. TăngSystemErrornếu set không phải là phiên bản củasethoặc kiểu con của nó.
-
int PySet_Clear(PyObject *set)¶
- Một phần của ABI ổn định. Thread safety: Atomic.
Làm trống một tập hợp hiện có của tất cả các phần tử. Trả về
0khi thành công. Trả về-1và tăngSystemErrornếu set không phải là một phiên bản củasethoặc kiểu con của nó.Ghi chú
Trong free-threaded build, tập hợp này bị xóa trước khi các mục của nó bị xóa, do đó các luồng khác sẽ quan sát một tập hợp trống thay vì trạng thái trung gian.
API không được dùng nữa¶
-
PySet_MINSIZE¶
Hằng số soft deprecated biểu thị kích thước của bảng được phân bổ trước nội bộ bên trong các phiên bản
PySetObject.Điều này chỉ được ghi lại để đảm bảo tính đầy đủ, vì không có gì đảm bảo rằng một phiên bản CPython nhất định sử dụng các bảng được phân bổ trước với kích thước cố định. Trong mã không xử lý các phần bên trong được thiết lập không ổn định,
PySet_MINSIZEcó thể được thay thế bằng một hằng số nhỏ như8.Nếu đang tìm kích thước của một bộ, hãy sử dụng
PySet_Size()để thay thế.