اشیاء فهرست¶
-
PyTypeObject PyList_Type¶
- قسمتی از ABI پایدار.
این نمونه از
PyTypeObjectنمایانگر نوع فهرست پایتون است. این همان شیءlistدر لایهی پایتون است.
-
int PyList_Check(PyObject *p)¶
- Thread safety: Atomic.
اگر p یک شیء فهرست یا نمونهای از یک زیرنوع از نوع فهرست باشد، مقدار true را برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.
-
int PyList_CheckExact(PyObject *p)¶
- Thread safety: Atomic.
اگر p یک شیء فهرست باشد، اما نمونهای از زیرنوعی از نوع فهرست نباشد، true برمیگرداند. این تابع همیشه موفق میشود.
-
PyObject *PyList_New(Py_ssize_t len)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Atomic.
در صورت موفقیت، فهرست جدیدی به طول len برمیگرداند، یا در صورت شکست
NULL.توجه
اگر len بزرگتر از صفر باشد، آیتمهای شیء فهرست بازگرداندهشده روی
NULLتنظیم میشوند. بنابراین پیش از آنکه تمام آیتمها را باPyList_SetItem()یاPyList_SET_ITEM()روی یک شیء واقعی تنظیم کنید، نمیتوانید از توابع API انتزاعی مانندPySequence_SetItem()استفاده کنید یا شیء را در دسترس کد پایتون قرار دهید. APIهای زیر پیش از آنکه فهرست بهطور کامل مقداردهی اولیه شود، امن هستند:PyList_SetItem()وPyList_SET_ITEM().
-
Py_ssize_t PyList_Size(PyObject *list)¶
- قسمتی از ABI پایدار. Thread safety: Atomic.
طول شیء فهرست در list را برمیگرداند؛ این معادل
len(list)روی یک شیء فهرست است.
-
Py_ssize_t PyList_GET_SIZE(PyObject *list)¶
- Thread safety: Atomic.
مشابه
PyList_Size()، اما بدون بررسی خطا.
-
PyObject *PyList_GetItemRef(PyObject *list, Py_ssize_t index)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار از نسخهی 3.13. Thread safety: Atomic.
شیء موجود در موقعیت index در فهرستی که list به آن اشاره میکند را برمیگرداند. موقعیت باید نامنفی باشد؛ اندیسدهی از انتهای فهرست پشتیبانی نمیشود. اگر index خارج از محدوده باشد (
<0 or >=len(list))،NULLرا برمیگرداند و استثنایIndexErrorرا تنظیم میکند.اضافه شده در نسخهی 3.13.
-
PyObject *PyList_GetItem(PyObject *list, Py_ssize_t index)¶
- مقدار بازگشتی: مرجع امانتی. قسمتی از ABI پایدار. Thread safety: Safe to call from multiple threads with external synchronization only.
مانند
PyList_GetItemRef()، اما بهجای ارجاع قوی، یک ارجاع امانتی برمیگرداند.توجه
در ساخت نخآزاد، ارجاع امانتی بازگرداندهشده ممکن است در صورت تغییر همزمان فهرست توسط نخ دیگر، نامعتبر شود. بهتر است از
PyList_GetItemRef()استفاده کنید که یک ارجاع قوی برمیگرداند.
-
PyObject *PyList_GET_ITEM(PyObject *list, Py_ssize_t i)¶
- مقدار بازگشتی: مرجع امانتی. Thread safety: Safe to call from multiple threads with external synchronization only.
مشابه
PyList_GetItem()، اما بدون بررسی خطا.توجه
در ساخت نخآزاد، ارجاع امانتی بازگرداندهشده ممکن است در صورت تغییر همزمان فهرست توسط نخ دیگر، نامعتبر شود. بهتر است از
PyList_GetItemRef()استفاده کنید که یک ارجاع قوی برمیگرداند.
-
int PyList_SetItem(PyObject *list, Py_ssize_t index, PyObject *item)¶
- قسمتی از ABI پایدار. Thread safety: Atomic.
آیتم موجود در اندیس index در فهرست را به item تنظیم میکند. در صورت موفقیت
0را برمیگرداند. اگر index خارج از محدوده باشد،-1را برمیگرداند و استثنایIndexErrorرا برقرار میکند.توجه
این تابع ارجاعی به item را «میدزدد»، حتی در صورت وقوع خطا. در صورت موفقیت، این تابع ارجاعی به آیتمی را که از قبل در موقعیت متأثر در فهرست بوده است، رها میکند (مگر آنکه
NULLبوده باشد).
-
void PyList_SET_ITEM(PyObject *list, Py_ssize_t i, PyObject *o)¶
- Thread safety: Safe to call from multiple threads with external synchronization only.
فرم ماکرویِ
PyList_SetItem()بدون بررسی خطا. این معمولاً فقط برای پر کردن فهرستهای جدیدی که محتوای قبلی ندارند، استفاده میشود.اگر پایتون در حالت اشکالزدایی یا
با ادعاهاساخته شده باشد، بررسی کرانها بهصورت یک ادعا انجام میشود.توجه
این ماکرو ارجاعی به item را «میدزدد» و برخلاف
PyList_SetItem()، ارجاع به هیچ آیتمی که جایگزین میشود را دور نمیاندازد؛ هر ارجاعی که در جایگاه i از list باشد، نشت خواهد کرد.توجه
در ساخت نخآزاد، این ماکرو هیچ همگامسازی داخلی ندارد. معمولاً تنها برای پر کردن فهرستهای جدیدی استفاده میشود که هیچ نخ دیگری ارجاعی به آن فهرست ندارد. اگر ممکن است فهرست مشترک باشد، بهجای آن از
PyList_SetItem()استفاده کنید که از قفل به ازای هر شیء استفاده میکند.
-
int PyList_Insert(PyObject *list, Py_ssize_t index, PyObject *item)¶
- قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
آیتم item را در جلوی اندیس index در فهرست list درج میکند. در صورت موفقیت
0را برمیگرداند؛ در صورت عدم موفقیت-1را برمیگرداند و یک استثنا تنظیم میکند. مشابهlist.insert(index, item)است.
-
int PyList_Append(PyObject *list, PyObject *item)¶
- قسمتی از ABI پایدار. Thread safety: Atomic.
شیء item را به انتهای فهرست list میافزاید. در صورت موفقیت
0را برمیگرداند؛ در صورت ناموفق بودن،-1را برمیگرداند و یک استثنا تنظیم میکند. مشابهlist.append(item)است.
-
PyObject *PyList_GetSlice(PyObject *list, Py_ssize_t low, Py_ssize_t high)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Atomic.
فهرستی از اشیاء موجود در list را برمیگرداند که اشیاء بین low و high را در بر میگیرد. در صورت شکست،
NULLبرمیگرداند و یک استثنا تنظیم میکند. مشابهlist[low:high]است. اندیسگذاری از انتهای فهرست پشتیبانی نمیشود.
-
int PyList_SetSlice(PyObject *list, Py_ssize_t low, Py_ssize_t high, PyObject *itemlist)¶
- قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
اسلایس list بین low و high را برابر محتویات itemlist قرار میدهد. مشابه
list[low:high] = itemlistاست. itemlist میتواندNULLباشد که نشاندهندهی انتساب یک فهرست خالی است (حذف اسلایس). در صورت موفقیت0و در صورت شکست-1را برمیگرداند. اندیسگذاری از انتهای فهرست پشتیبانی نمیشود.توجه
در ساخت نخآزاد، وقتی itemlist یک
listباشد، هر دو list و itemlist در طول عملیات قفل میشوند. برای سایر پیمایشپذیرها (یاNULL)، تنها list قفل میشود.
-
int PyList_Extend(PyObject *list, PyObject *iterable)¶
- Thread safety: Safe for concurrent use on the same object.
list را با محتویات iterable گسترش میدهد. این همان
PyList_SetSlice(list, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, iterable)است و مشابهlist.extend(iterable)یاlist += iterableاست.اگر list یک شیء
listنباشد، استثنا ایجاد میکند و-1را برمیگرداند. در صورت موفقیت ۰ را برمیگرداند.اضافه شده در نسخهی 3.13.
توجه
در free-threaded build، وقتی iterable یک
list،set،dictیا نمای دیکشنری باشد، هم list و هم iterable (یا دیکشنری زیربنایی آن) برای مدتزمان عملیات قفل میشوند. برای سایر پیمایشپذیرها، تنها list قفل میشود؛ iterable ممکن است بهطور همزمان توسط نخ دیگری تغییر داده شود.
-
int PyList_Clear(PyObject *list)¶
- Thread safety: Atomic.
تمام آیتمها را از list حذف میکند. این همان
PyList_SetSlice(list, 0, PY_SSIZE_T_MAX, NULL)است و مشابهlist.clear()یاdel list[:]است.اگر list یک شیء
listنباشد، استثنا برمیانگیزد و-1را برمیگرداند. در صورت موفقیت 0 را برمیگرداند.اضافه شده در نسخهی 3.13.
-
int PyList_Sort(PyObject *list)¶
- قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
آیتمهای list را درجا مرتب میکند. در صورت موفقیت
0و در صورت شکست-1را برمیگرداند. این معادلlist.sort()است.توجه
در نسخهی نخآزاد، مقایسهی عناصر از طریق
__lt__()میتواند کد پایتون دلخواهی اجرا کند که در این مدت قفل بهازای هر شیء ممکن است بهطور موقت آزاد شود. برای نوعهای توکار (str،int،float)، قفل در حین مقایسه آزاد نمیشود.
-
int PyList_Reverse(PyObject *list)¶
- قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
آیتمهای list را بهصورت درجا معکوس میکند. در صورت موفقیت
0و در صورت شکست-1برمیگرداند. این معادلlist.reverse()است.
-
PyObject *PyList_AsTuple(PyObject *list)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Atomic.
یک شیء تاپل جدید حاوی محتوای list برمیگرداند؛ معادل
tuple(list)است.