Đặ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 setfrozenset. 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()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()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ượng setfrozenset. 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ại set củ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ại frozenset củ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 set hoặ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 frozenset hoặ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ượng frozenset hoặ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 set như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 set hoặc đối tượng frozenset như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 frozenset như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 set mớ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ặc NULL nếu thất bại. Tăng TypeError nế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 iterableset, frozenset hoặc dict.

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 frozenset mớ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ặc NULL nếu thất bại. Tăng TypeError nế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 iterableset, frozenset hoặc dict.

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 set hoặc frozenset. Tương đương với len(anyset). Tăng SystemError nếu anyset không phải là set, frozenset hoặ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ề 1 nếu tìm thấy, 0 nếu không tìm thấy và -1 nế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ăng TypeError nếu key không thể băm được. Tăng SystemError nếu anyset không phải là set, frozenset hoặc một phiên bản của một kiểu con.

Ghi chú

Hoạt động là nguyên tử trên free threading khi keystr, int, float, bool hoặc bytes.

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ản frozenset (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ề 0 nếu thành công hoặc -1 nếu thất bại. Tăng TypeError nếu key không thể băm được. Tăng MemoryError nếu không còn chỗ để phát triển. Tăng SystemError nếu set không phải là phiên bản của set hoặc kiểu con của nó.

Ghi chú

Hoạt động là nguyên tử trên free threading khi keystr, int, float, bool hoặc bytes.

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ề 1 nếu tìm thấy và xóa, 0 nếu không tìm thấy (không thực hiện hành động nào) và -1 nếu gặp lỗi. Không tăng KeyError khi thiếu phím. Tăng TypeError nếu key không thể băm được. Không giống như phương thức discard() 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ăng SystemError nếu set không phải là một phiên bản của set hoặc kiểu con của nó.

Ghi chú

Hoạt động là nguyên tử trên free threading khi keystr, int, float, bool hoặc bytes.

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ề NULL khi thất bại. Tăng KeyError nếu bộ trống. Tăng SystemError nếu set không phải là phiên bản của set hoặ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ề 0 khi thành công. Trả về -1 và tăng SystemError nếu set không phải là một phiên bản của set hoặ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_MINSIZE có 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ế.