Объекты списков¶List Objects
-
PyTypeObject PyList_Type¶
- Часть Stable ABI.
Этот экземпляр
PyTypeObjectпредставляет тип списка Python. Это тот же объект, что иlistв слое Python.
-
int PyList_Check(PyObject *p)¶
- Потокобезопасность: атомарно.
Возвращает true, если p является объектом списка или экземпляром подтипа типа списка. Эта функция всегда завершается успешно.
-
int PyList_CheckExact(PyObject *p)¶
- Потокобезопасность: атомарно.
Возвращает true, если p является объектом списка, но не экземпляром подтипа типа списка. Эта функция всегда завершается успешно.
-
PyObject *PyList_New(Py_ssize_t len)¶
- Возвращаемое значение: новая ссылка. Часть стабильного ABI. Потокобезопасность: атомарно.
Возвращает новый список длины len в случае успеха или
NULLв случае ошибки.Примечание
Если len больше нуля, элементы возвращаемого объекта списка устанавливаются в
NULL. Поэтому нельзя использовать абстрактные функции API, такие какPySequence_SetItem(), или предоставлять объект коду Python до установки всех элементов в реальный объект с помощьюPyList_SetItem()илиPyList_SET_ITEM(). Следующие API безопасны до полной инициализации списка:PyList_SetItem()иPyList_SET_ITEM().
-
Py_ssize_t PyList_Size(PyObject *list)¶
- Часть Stable ABI.Потокобезопасность: Атомарно.
Возвращает длину объекта списка в list; это эквивалентно
len(list)для объекта списка.
-
Py_ssize_t PyList_GET_SIZE(PyObject *list)¶
- Потокобезопасность: атомарно.
Аналогично
PyList_Size(), но без проверки ошибок.
-
PyObject *PyList_GetItemRef(PyObject *list, Py_ssize_t index)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.13. Потокобезопасность: атомарно.
Возвращает объект на позиции index в списке, на который указывает list. Позиция должна быть неотрицательной; индексация от конца списка не поддерживается. Если index выходит за границы (
<0 or >=len(list)), возвращаетсяNULLи устанавливается исключениеIndexError.Добавлено в версии 3.13.
-
PyObject *PyList_GetItem(PyObject *list, Py_ssize_t index)¶
- Возвращаемое значение: заимствованная ссылка. Часть стабильного ABI. Потокобезопасность: Безопасно вызывать из нескольких потоков только с внешней синхронизацией.
Как
PyList_GetItemRef(), но возвращает заимствованную ссылку вместо сильной ссылки.Примечание
В сборке со свободными потоками возвращаемая заимствованная ссылка может стать недействительной, если другой поток изменяет список конкурентно. Предпочтительнее
PyList_GetItemRef(), которая возвращает сильную ссылку.
-
PyObject *PyList_GET_ITEM(PyObject *list, Py_ssize_t i)¶
- Возвращаемое значение: заимствованная ссылка. Потокобезопасность: Безопасно вызывать из нескольких потоков только с внешней синхронизацией.
Аналогично
PyList_GetItem(), но без проверки ошибок.Примечание
В сборке со свободными потоками возвращаемая заимствованная ссылка может стать недействительной, если другой поток изменяет список конкурентно. Предпочтительнее
PyList_GetItemRef(), которая возвращает сильную ссылку.
-
int PyList_SetItem(PyObject *list, Py_ssize_t index, PyObject *item)¶
- Часть Stable ABI.Потокобезопасность: Атомарно.
Устанавливает элемент на индексе index в списке в значение item. Возвращает
0в случае успеха. Если index выходит за границы, возвращает-1и устанавливает исключениеIndexError.Примечание
Эта функция «крадёт» ссылку на item, даже в случае ошибки. В случае успеха она отбрасывает ссылку на элемент, уже находящийся в списке на соответствующей позиции (если только это не
NULL).
-
void PyList_SET_ITEM(PyObject *list, Py_ssize_t i, PyObject *o)¶
- Потокобезопасность: Безопасно вызывать из нескольких потоков только с внешней синхронизацией.
Макро-форма
PyList_SetItem()без проверки ошибок. Обычно используется только для заполнения новых списков, где нет предыдущего содержимого.Проверка границ выполняется как утверждение, если Python собран в режиме отладки или
with assertions.Примечание
Этот макрос «крадёт» ссылку на item и, в отличие от
PyList_SetItem(), не отбрасывает ссылку на любой элемент, который заменяется; любая ссылка в list на позиции i будет утеряна (утечка).Примечание
В сборке со свободными потоками этот макрос не имеет внутренней синхронизации. Обычно он используется только для заполнения новых списков, на которые нет ссылок из других потоков. Если список может быть общим, используйте
PyList_SetItem(), который использует блокировку на объект.
-
int PyList_Insert(PyObject *list, Py_ssize_t index, PyObject *item)¶
- Часть Stable ABI. Потокобезопасность: Безопасно для одновременного использования на одном объекте.
Вставляет элемент item в список list перед индексом index. Возвращает
0при успехе; возвращает-1и устанавливает исключение при неудаче. Аналогичноlist.insert(index, item).
-
int PyList_Append(PyObject *list, PyObject *item)¶
- Часть Stable ABI.Потокобезопасность: Атомарно.
Добавляет объект item в конец списка list. Возвращает
0при успехе; возвращает-1и устанавливает исключение при неудаче. Аналогичноlist.append(item).
-
PyObject *PyList_GetSlice(PyObject *list, Py_ssize_t low, Py_ssize_t high)¶
- Возвращаемое значение: новая ссылка. Часть стабильного ABI. Потокобезопасность: атомарно.
Возвращает список объектов из list, содержащий объекты между low и high. Возвращает
NULLи устанавливает исключение при неудаче. Аналогичноlist[low:high]. Индексация с конца списка не поддерживается.
-
int PyList_SetSlice(PyObject *list, Py_ssize_t low, Py_ssize_t high, PyObject *itemlist)¶
- Часть Stable ABI. Потокобезопасность: Безопасно для одновременного использования на одном объекте.
Устанавливает срез 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)¶
- Потокобезопасность: Безопасно для одновременного использования на одном объекте.
Расширяет list содержимым iterable. Это то же самое, что
PyList_SetSlice(list, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, iterable)и аналогичноlist.extend(iterable)илиlist += iterable.Вызывает исключение и возвращает
-1, если list не является объектомlist. Возвращает 0 при успехе.Добавлено в версии 3.13.
Примечание
В сборке со свободными потоками, когда iterable является
list,set,dictили представлением словаря (dict view), оба list и iterable (или его базовый словарь) блокируются на время операции. Для других итерируемых объектов блокируется только list; iterable может одновременно изменяться другим потоком.
-
int PyList_Clear(PyObject *list)¶
- Потокобезопасность: атомарно.
Удаляет все элементы из list. Это то же самое, что
PyList_SetSlice(list, 0, PY_SSIZE_T_MAX, NULL)и аналогичноlist.clear()илиdel list[:].Вызывает исключение и возвращает
-1, если list не является объектомlist. Возвращает 0 при успехе.Добавлено в версии 3.13.
-
int PyList_Sort(PyObject *list)¶
- Часть Stable ABI. Потокобезопасность: Безопасно для одновременного использования на одном объекте.
Сортирует элементы list на месте. Возвращает
0при успехе,-1при неудаче. Эквивалентноlist.sort().Примечание
В сборке со свободными потоками сравнение элементов через
__lt__()может выполнять произвольный код Python, во время которого побъектная блокировка может временно сниматься. Для встроенных типов (str,int,float) блокировка не снимается во время сравнения.
-
int PyList_Reverse(PyObject *list)¶
- Часть Stable ABI. Потокобезопасность: Безопасно для одновременного использования на одном объекте.
Разворачивает элементы list на месте. Возвращает
0при успехе,-1при неудаче. Эквивалентноlist.reverse().
-
PyObject *PyList_AsTuple(PyObject *list)¶
- Возвращаемое значение: новая ссылка. Часть стабильного ABI. Потокобезопасность: атомарно.
Возвращает новый объект кортежа, содержащий содержимое list; эквивалентно
tuple(list).