اشیاء مجموعه¶
این بخش API عمومی اشیاء set و frozenset را با جزئیات شرح میدهد. بهترین راه دسترسی به هر قابلیتی که در ادامه فهرست نشده است، استفاده از پروتکل انتزاعی شیء (شامل PyObject_CallMethod()، PyObject_RichCompareBool()، PyObject_Hash()، PyObject_Repr()، PyObject_IsTrue()، PyObject_Print() و PyObject_GetIter()) یا پروتکل انتزاعی عدد (شامل PyNumber_And()، PyNumber_Subtract()، PyNumber_Or()، PyNumber_Xor()، PyNumber_InPlaceAnd()، PyNumber_InPlaceSubtract()، PyNumber_InPlaceOr() و PyNumber_InPlaceXor()) است.
-
type PySetObject¶
این زیرنوع از
PyObjectبرای نگهداشتن دادههای داخلی هر دو نوع شیءsetوfrozensetاستفاده میشود. این زیرنوع مانندPyDictObjectاست از این جهت که برای مجموعههای کوچک اندازهای ثابت دارد (بسیار شبیه ذخیرهسازی تاپل) و برای مجموعههای متوسط و بزرگ به یک بلوک حافظهی جداگانه با اندازه متغیر اشاره میکند (بسیار شبیه ذخیرهسازی فهرست). هیچیک از فیلدهای این ساختار نباید عمومی در نظر گرفته شود و همه آنها ممکن است تغییر کنند. تمام دسترسیها باید از طریق API مستندشده انجام شود، نه با دستکاری مقادیر درون ساختار.
-
PyTypeObject PySet_Type¶
- قسمتی از ABI پایدار.
این یک نمونه از
PyTypeObjectاست که نوعsetپایتون را نشان میدهد.
-
PyTypeObject PyFrozenSet_Type¶
- قسمتی از ABI پایدار.
این یک نمونه از
PyTypeObjectاست که نوعfrozensetپایتون را نشان میدهد.
ماکروهای بررسی نوع زیر روی اشارهگر به هر شیء پایتونی کار میکنند. به همین ترتیب، توابع سازنده با هر شیء پیمایشپذیر پایتونی کار میکنند.
-
int PySet_Check(PyObject *p)¶
اگر p یک شیء
setیا نمونهای از یک زیرنوع باشد، مقدار true را برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.
-
int PyFrozenSet_Check(PyObject *p)¶
اگر p یک شیء
frozensetیا نمونهای از یک زیرنوع باشد، مقدار true را برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.
-
int PyAnySet_Check(PyObject *p)¶
اگر p یک شیء
set، یک شیءfrozensetیا نمونهای از یک زیرنوع باشد، مقدار true را برمیگرداند. این تابع همیشه موفق میشود.
-
int PySet_CheckExact(PyObject *p)¶
اگر p یک شیء
setباشد اما نمونهای از یک زیرنوع نباشد، مقدار درست را برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.اضافه شده در نسخهی 3.10.
-
int PyAnySet_CheckExact(PyObject *p)¶
اگر p یک شیء
setیا یک شیءfrozensetباشد اما نمونهای از یک زیرنوع نباشد، مقدار true را برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.
-
int PyFrozenSet_CheckExact(PyObject *p)¶
اگر p یک شیء
frozensetباشد اما نمونهای از یک زیرنوع نباشد، مقدار درست را برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.
-
PyObject *PySet_New(PyObject *iterable)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
یک
setجدید شامل اشیاء بازگرداندهشده توسط iterable برمیگرداند. iterable میتواندNULLباشد تا یک مجموعهی خالی جدید ایجاد شود. در صورت موفقیت مجموعهی جدید و در صورت شکستNULLبرمیگرداند. اگر iterable در واقع پیمایشپذیر نباشد، استثنایTypeErrorایجاد میشود. این سازنده برای کپیکردن یک مجموعه نیز مفید است (c=set(s)).توجه
این عملیات در نخبندی آزاد زمانی اتمی است که iterable یک
set،frozensetیاdictباشد.
-
PyObject *PyFrozenSet_New(PyObject *iterable)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
یک
frozensetجدید شامل اشیایی که توسط iterable برگردانده میشوند را برمیگرداند. iterable میتواندNULLباشد تا یک frozenset خالی جدید ایجاد شود. در صورت موفقیت، مجموعه جدید و در صورت شکست،NULLبرگردانده میشود. اگر iterable در واقع پیمایشپذیر نباشد،TypeErrorایجاد میشود.توجه
این عملیات در نخبندی آزاد زمانی اتمی است که iterable یک
set،frozensetیاdictباشد.
توابع و ماکروهای زیر برای نمونههای set یا frozenset یا نمونههای زیرنوعهای آنها در دسترس هستند.
-
Py_ssize_t PySet_Size(PyObject *anyset)¶
- قسمتی از ABI پایدار. Thread safety: Atomic.
طول یک شیء
setیاfrozensetرا برمیگرداند. معادلlen(anyset)است. اگر anyset یکset،frozensetیا نمونهای از یک زیرنوع نباشد، استثنایSystemErrorایجاد میکند.
-
Py_ssize_t PySet_GET_SIZE(PyObject *anyset)¶
- Thread safety: Atomic.
شکل ماکروی
PySet_Size()بدون بررسی خطا.
-
int PySet_Contains(PyObject *anyset, PyObject *key)¶
- قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
مقدار
1را در صورت یافتشدن،0را در صورت یافتنشدن و-1را در صورت بروز خطا برمیگرداند. برخلاف متد__contains__()پایتون، این تابع مجموعههای هشناپذیر را بهطور خودکار به frozensetهای موقت تبدیل نمیکند. اگر key هشناپذیر باشد، یکTypeErrorایجاد میکند. اگر anyset یکset،frozensetیا نمونهای از یک زیرنوع نباشد،SystemErrorایجاد میکند.
-
int PySet_Add(PyObject *set, PyObject *key)¶
- قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
key را به یک نمونه از
setاضافه میکند. همچنین با نمونههایfrozensetکار میکند (مانندPyTuple_SetItem()، میتوان از آن برای پر کردن مقادیر frozensetهای تازهساخته پیش از آنکه در معرض کد دیگر قرار گیرند استفاده کرد). در صورت موفقیت0یا در صورت شکست-1را برمیگرداند. اگر key هشناپذیر باشد،TypeErrorایجاد میشود. اگر فضایی برای رشد وجود نداشته باشد،MemoryErrorایجاد میشود. اگر set نمونهای ازsetیا زیرنوع آن نباشد،SystemErrorایجاد میشود.
توابع زیر برای نمونههای set یا زیرنوعهای آن در دسترس هستند، اما برای نمونههای frozenset یا زیرنوعهای آن در دسترس نیستند.
-
int PySet_Discard(PyObject *set, PyObject *key)¶
- قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
اگر یافته و حذف شود،
1؛ اگر یافت نشود (هیچ عملی انجام نمیشود)،0؛ و اگر با خطایی مواجه شود،-1برمیگرداند. استثنایKeyErrorرا برای کلیدهای مفقود ایجاد نمیکند. اگر key هشناپذیر باشد، استثنایTypeErrorایجاد میکند. برخلاف متدdiscard()در پایتون، این تابع مجموعههای هشناپذیر را بهطور خودکار به frozensetهای موقت تبدیل نمیکند. اگر set نمونهای ازsetیا زیرنوع آن نباشد، استثنایSystemErrorایجاد میکند.
-
PyObject *PySet_Pop(PyObject *set)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Atomic.
یک ارجاع جدید به یک شیء دلخواه در set برمیگرداند و آن شیء را از set حذف میکند. در صورت شکست
NULLرا برمیگرداند. اگر مجموعه خالی باشد، استثنایKeyErrorایجاد میشود. اگر set نمونهای ازsetیا زیرنوع آن نباشد، استثنایSystemErrorایجاد میشود.
-
int PySet_Clear(PyObject *set)¶
- قسمتی از ABI پایدار. Thread safety: Atomic.
یک مجموعهی موجود را از تمام عناصرش خالی میکند. در صورت موفقیت
0را برمیگرداند. اگر set نمونهای ازsetیا زیرنوع آن نباشد،-1را برمیگرداند و استثنایSystemErrorرا ایجاد میکند.توجه
در free-threaded build، مجموعه پیش از پاک شدن ورودیهایش خالی میشود، بنابراین نخهای دیگر بهجای وضعیتهای میانی، مجموعهای خالی را مشاهده خواهند کرد.
API منسوخ¶
-
PySet_MINSIZE¶
ثابتی که نشاندهندهی اندازهی جدول داخلی پیشتخصیصشده درون نمونههای
PySetObjectاست.این مورد صرفاً برای کامل بودن مستند شده است، زیرا هیچ تضمینی وجود ندارد که نسخهی خاصی از سیپایتون از جدولهای پیشتخصیصشده با اندازهی ثابت استفاده کند. در کدی که با جزئیات داخلی ناپایدار مجموعه سروکار ندارد، میتوان
PySet_MINSIZEرا با یک ثابت کوچک مانند8جایگزین کرد.اگر به دنبال اندازهی یک مجموعه هستید، بهجای آن از
PySet_Size()استفاده کنید.منسوخسازی نرم <Soft deprecated> از نسخهی 3.14.