17db96d56Sopenharmony_ci.. highlight:: c 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci.. _tupleobjects: 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ciTuple Objects 67db96d56Sopenharmony_ci------------- 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci.. index:: pair: object; tuple 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci.. c:type:: PyTupleObject 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci This subtype of :c:type:`PyObject` represents a Python tuple object. 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ci.. c:var:: PyTypeObject PyTuple_Type 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci This instance of :c:type:`PyTypeObject` represents the Python tuple type; it 197db96d56Sopenharmony_ci is the same object as :class:`tuple` in the Python layer. 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ci.. c:function:: int PyTuple_Check(PyObject *p) 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci Return true if *p* is a tuple object or an instance of a subtype of the 257db96d56Sopenharmony_ci tuple type. This function always succeeds. 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ci.. c:function:: int PyTuple_CheckExact(PyObject *p) 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci Return true if *p* is a tuple object, but not an instance of a subtype of the 317db96d56Sopenharmony_ci tuple type. This function always succeeds. 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci.. c:function:: PyObject* PyTuple_New(Py_ssize_t len) 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ci Return a new tuple object of size *len*, or ``NULL`` on failure. 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci.. c:function:: PyObject* PyTuple_Pack(Py_ssize_t n, ...) 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci Return a new tuple object of size *n*, or ``NULL`` on failure. The tuple values 427db96d56Sopenharmony_ci are initialized to the subsequent *n* C arguments pointing to Python objects. 437db96d56Sopenharmony_ci ``PyTuple_Pack(2, a, b)`` is equivalent to ``Py_BuildValue("(OO)", a, b)``. 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci.. c:function:: Py_ssize_t PyTuple_Size(PyObject *p) 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci Take a pointer to a tuple object, and return the size of that tuple. 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci.. c:function:: Py_ssize_t PyTuple_GET_SIZE(PyObject *p) 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci Return the size of the tuple *p*, which must be non-``NULL`` and point to a tuple; 547db96d56Sopenharmony_ci no error checking is performed. 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci.. c:function:: PyObject* PyTuple_GetItem(PyObject *p, Py_ssize_t pos) 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci Return the object at position *pos* in the tuple pointed to by *p*. If *pos* is 607db96d56Sopenharmony_ci negative or out of bounds, return ``NULL`` and set an :exc:`IndexError` exception. 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci.. c:function:: PyObject* PyTuple_GET_ITEM(PyObject *p, Py_ssize_t pos) 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci Like :c:func:`PyTuple_GetItem`, but does no checking of its arguments. 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ci.. c:function:: PyObject* PyTuple_GetSlice(PyObject *p, Py_ssize_t low, Py_ssize_t high) 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci Return the slice of the tuple pointed to by *p* between *low* and *high*, 717db96d56Sopenharmony_ci or ``NULL`` on failure. This is the equivalent of the Python expression 727db96d56Sopenharmony_ci ``p[low:high]``. Indexing from the end of the list is not supported. 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci.. c:function:: int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o) 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci Insert a reference to object *o* at position *pos* of the tuple pointed to by 787db96d56Sopenharmony_ci *p*. Return ``0`` on success. If *pos* is out of bounds, return ``-1`` 797db96d56Sopenharmony_ci and set an :exc:`IndexError` exception. 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci .. note:: 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci This function "steals" a reference to *o* and discards a reference to 847db96d56Sopenharmony_ci an item already in the tuple at the affected position. 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci.. c:function:: void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o) 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci Like :c:func:`PyTuple_SetItem`, but does no error checking, and should *only* be 907db96d56Sopenharmony_ci used to fill in brand new tuples. 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci .. note:: 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci This function "steals" a reference to *o*, and, unlike 957db96d56Sopenharmony_ci :c:func:`PyTuple_SetItem`, does *not* discard a reference to any item that 967db96d56Sopenharmony_ci is being replaced; any reference in the tuple at position *pos* will be 977db96d56Sopenharmony_ci leaked. 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ci.. c:function:: int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize) 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci Can be used to resize a tuple. *newsize* will be the new length of the tuple. 1037db96d56Sopenharmony_ci Because tuples are *supposed* to be immutable, this should only be used if there 1047db96d56Sopenharmony_ci is only one reference to the object. Do *not* use this if the tuple may already 1057db96d56Sopenharmony_ci be known to some other part of the code. The tuple will always grow or shrink 1067db96d56Sopenharmony_ci at the end. Think of this as destroying the old tuple and creating a new one, 1077db96d56Sopenharmony_ci only more efficiently. Returns ``0`` on success. Client code should never 1087db96d56Sopenharmony_ci assume that the resulting value of ``*p`` will be the same as before calling 1097db96d56Sopenharmony_ci this function. If the object referenced by ``*p`` is replaced, the original 1107db96d56Sopenharmony_ci ``*p`` is destroyed. On failure, returns ``-1`` and sets ``*p`` to ``NULL``, and 1117db96d56Sopenharmony_ci raises :exc:`MemoryError` or :exc:`SystemError`. 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_ciStruct Sequence Objects 1157db96d56Sopenharmony_ci----------------------- 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ciStruct sequence objects are the C equivalent of :func:`~collections.namedtuple` 1187db96d56Sopenharmony_ciobjects, i.e. a sequence whose items can also be accessed through attributes. 1197db96d56Sopenharmony_ciTo create a struct sequence, you first have to create a specific struct sequence 1207db96d56Sopenharmony_citype. 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci.. c:function:: PyTypeObject* PyStructSequence_NewType(PyStructSequence_Desc *desc) 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci Create a new struct sequence type from the data in *desc*, described below. Instances 1257db96d56Sopenharmony_ci of the resulting type can be created with :c:func:`PyStructSequence_New`. 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci.. c:function:: void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc) 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci Initializes a struct sequence type *type* from *desc* in place. 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_ci 1337db96d56Sopenharmony_ci.. c:function:: int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc) 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci The same as ``PyStructSequence_InitType``, but returns ``0`` on success and ``-1`` on 1367db96d56Sopenharmony_ci failure. 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ci .. versionadded:: 3.4 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci.. c:type:: PyStructSequence_Desc 1427db96d56Sopenharmony_ci 1437db96d56Sopenharmony_ci Contains the meta information of a struct sequence type to create. 1447db96d56Sopenharmony_ci 1457db96d56Sopenharmony_ci +-------------------+------------------------------+--------------------------------------+ 1467db96d56Sopenharmony_ci | Field | C Type | Meaning | 1477db96d56Sopenharmony_ci +===================+==============================+======================================+ 1487db96d56Sopenharmony_ci | ``name`` | ``const char *`` | name of the struct sequence type | 1497db96d56Sopenharmony_ci +-------------------+------------------------------+--------------------------------------+ 1507db96d56Sopenharmony_ci | ``doc`` | ``const char *`` | pointer to docstring for the type | 1517db96d56Sopenharmony_ci | | | or ``NULL`` to omit | 1527db96d56Sopenharmony_ci +-------------------+------------------------------+--------------------------------------+ 1537db96d56Sopenharmony_ci | ``fields`` | ``PyStructSequence_Field *`` | pointer to ``NULL``-terminated array | 1547db96d56Sopenharmony_ci | | | with field names of the new type | 1557db96d56Sopenharmony_ci +-------------------+------------------------------+--------------------------------------+ 1567db96d56Sopenharmony_ci | ``n_in_sequence`` | ``int`` | number of fields visible to the | 1577db96d56Sopenharmony_ci | | | Python side (if used as tuple) | 1587db96d56Sopenharmony_ci +-------------------+------------------------------+--------------------------------------+ 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci.. c:type:: PyStructSequence_Field 1627db96d56Sopenharmony_ci 1637db96d56Sopenharmony_ci Describes a field of a struct sequence. As a struct sequence is modeled as a 1647db96d56Sopenharmony_ci tuple, all fields are typed as :c:expr:`PyObject*`. The index in the 1657db96d56Sopenharmony_ci :attr:`fields` array of the :c:type:`PyStructSequence_Desc` determines which 1667db96d56Sopenharmony_ci field of the struct sequence is described. 1677db96d56Sopenharmony_ci 1687db96d56Sopenharmony_ci +-----------+------------------+-----------------------------------------+ 1697db96d56Sopenharmony_ci | Field | C Type | Meaning | 1707db96d56Sopenharmony_ci +===========+==================+=========================================+ 1717db96d56Sopenharmony_ci | ``name`` | ``const char *`` | name for the field or ``NULL`` to end | 1727db96d56Sopenharmony_ci | | | the list of named fields, set to | 1737db96d56Sopenharmony_ci | | | :c:data:`PyStructSequence_UnnamedField` | 1747db96d56Sopenharmony_ci | | | to leave unnamed | 1757db96d56Sopenharmony_ci +-----------+------------------+-----------------------------------------+ 1767db96d56Sopenharmony_ci | ``doc`` | ``const char *`` | field docstring or ``NULL`` to omit | 1777db96d56Sopenharmony_ci +-----------+------------------+-----------------------------------------+ 1787db96d56Sopenharmony_ci 1797db96d56Sopenharmony_ci 1807db96d56Sopenharmony_ci.. c:var:: const char * const PyStructSequence_UnnamedField 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci Special value for a field name to leave it unnamed. 1837db96d56Sopenharmony_ci 1847db96d56Sopenharmony_ci .. versionchanged:: 3.9 1857db96d56Sopenharmony_ci The type was changed from ``char *``. 1867db96d56Sopenharmony_ci 1877db96d56Sopenharmony_ci 1887db96d56Sopenharmony_ci.. c:function:: PyObject* PyStructSequence_New(PyTypeObject *type) 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ci Creates an instance of *type*, which must have been created with 1917db96d56Sopenharmony_ci :c:func:`PyStructSequence_NewType`. 1927db96d56Sopenharmony_ci 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci.. c:function:: PyObject* PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos) 1957db96d56Sopenharmony_ci 1967db96d56Sopenharmony_ci Return the object at position *pos* in the struct sequence pointed to by *p*. 1977db96d56Sopenharmony_ci No bounds checking is performed. 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ci 2007db96d56Sopenharmony_ci.. c:function:: PyObject* PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos) 2017db96d56Sopenharmony_ci 2027db96d56Sopenharmony_ci Macro equivalent of :c:func:`PyStructSequence_GetItem`. 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci 2057db96d56Sopenharmony_ci.. c:function:: void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o) 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_ci Sets the field at index *pos* of the struct sequence *p* to value *o*. Like 2087db96d56Sopenharmony_ci :c:func:`PyTuple_SET_ITEM`, this should only be used to fill in brand new 2097db96d56Sopenharmony_ci instances. 2107db96d56Sopenharmony_ci 2117db96d56Sopenharmony_ci .. note:: 2127db96d56Sopenharmony_ci 2137db96d56Sopenharmony_ci This function "steals" a reference to *o*. 2147db96d56Sopenharmony_ci 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ci.. c:function:: void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o) 2177db96d56Sopenharmony_ci 2187db96d56Sopenharmony_ci Similar to :c:func:`PyStructSequence_SetItem`, but implemented as a static 2197db96d56Sopenharmony_ci inlined function. 2207db96d56Sopenharmony_ci 2217db96d56Sopenharmony_ci .. note:: 2227db96d56Sopenharmony_ci 2237db96d56Sopenharmony_ci This function "steals" a reference to *o*. 224