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