summaryrefslogtreecommitdiffstats
path: root/Doc/c-api/tuple.rst
diff options
context:
space:
mode:
Diffstat (limited to 'Doc/c-api/tuple.rst')
-rw-r--r--Doc/c-api/tuple.rst181
1 files changed, 62 insertions, 119 deletions
diff --git a/Doc/c-api/tuple.rst b/Doc/c-api/tuple.rst
index 62bc9a5..fd85663 100644
--- a/Doc/c-api/tuple.rst
+++ b/Doc/c-api/tuple.rst
@@ -1,4 +1,4 @@
-.. highlight:: c
+.. highlightlang:: c
.. _tupleobjects:
@@ -15,8 +15,10 @@ Tuple Objects
.. c:var:: PyTypeObject PyTuple_Type
- This instance of :c:type:`PyTypeObject` represents the Python tuple type; it
- is the same object as :class:`tuple` in the Python layer.
+ .. index:: single: TupleType (in module types)
+
+ This instance of :c:type:`PyTypeObject` represents the Python tuple type; it is
+ the same object as ``tuple`` and ``types.TupleType`` in the Python layer..
.. c:function:: int PyTuple_Check(PyObject *p)
@@ -24,53 +26,88 @@ Tuple Objects
Return true if *p* is a tuple object or an instance of a subtype of the tuple
type.
+ .. versionchanged:: 2.2
+ Allowed subtypes to be accepted.
+
.. c:function:: int PyTuple_CheckExact(PyObject *p)
Return true if *p* is a tuple object, but not an instance of a subtype of the
tuple type.
+ .. versionadded:: 2.2
+
.. c:function:: PyObject* PyTuple_New(Py_ssize_t len)
- Return a new tuple object of size *len*, or ``NULL`` on failure.
+ Return a new tuple object of size *len*, or *NULL* on failure.
+
+ .. versionchanged:: 2.5
+ This function used an :c:type:`int` type for *len*. This might require
+ changes in your code for properly supporting 64-bit systems.
.. c:function:: PyObject* PyTuple_Pack(Py_ssize_t n, ...)
- Return a new tuple object of size *n*, or ``NULL`` on failure. The tuple values
+ Return a new tuple object of size *n*, or *NULL* on failure. The tuple values
are initialized to the subsequent *n* C arguments pointing to Python objects.
``PyTuple_Pack(2, a, b)`` is equivalent to ``Py_BuildValue("(OO)", a, b)``.
+ .. versionadded:: 2.4
+
+ .. versionchanged:: 2.5
+ This function used an :c:type:`int` type for *n*. This might require
+ changes in your code for properly supporting 64-bit systems.
+
.. c:function:: Py_ssize_t PyTuple_Size(PyObject *p)
Take a pointer to a tuple object, and return the size of that tuple.
+ .. versionchanged:: 2.5
+ This function returned an :c:type:`int` type. This might require changes
+ in your code for properly supporting 64-bit systems.
+
.. c:function:: Py_ssize_t PyTuple_GET_SIZE(PyObject *p)
- Return the size of the tuple *p*, which must be non-``NULL`` and point to a tuple;
+ Return the size of the tuple *p*, which must be non-*NULL* and point to a tuple;
no error checking is performed.
+ .. versionchanged:: 2.5
+ This function returned an :c:type:`int` type. This might require changes
+ in your code for properly supporting 64-bit systems.
+
.. c:function:: PyObject* PyTuple_GetItem(PyObject *p, Py_ssize_t pos)
Return the object at position *pos* in the tuple pointed to by *p*. If *pos* is
- out of bounds, return ``NULL`` and set an :exc:`IndexError` exception.
+ out of bounds, return *NULL* and set an :exc:`IndexError` exception.
+
+ .. versionchanged:: 2.5
+ This function used an :c:type:`int` type for *pos*. This might require
+ changes in your code for properly supporting 64-bit systems.
.. c:function:: PyObject* PyTuple_GET_ITEM(PyObject *p, Py_ssize_t pos)
Like :c:func:`PyTuple_GetItem`, but does no checking of its arguments.
+ .. versionchanged:: 2.5
+ This function used an :c:type:`int` type for *pos*. This might require
+ changes in your code for properly supporting 64-bit systems.
+
.. c:function:: PyObject* PyTuple_GetSlice(PyObject *p, Py_ssize_t low, Py_ssize_t high)
Return the slice of the tuple pointed to by *p* between *low* and *high*,
- or ``NULL`` on failure. This is the equivalent of the Python expression
+ or *NULL* on failure. This is the equivalent of the Python expression
``p[low:high]``. Indexing from the end of the list is not supported.
+ .. versionchanged:: 2.5
+ This function used an :c:type:`int` type for *low* and *high*. This might
+ require changes in your code for properly supporting 64-bit systems.
+
.. c:function:: int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
@@ -83,6 +120,10 @@ Tuple Objects
This function "steals" a reference to *o* and discards a reference to
an item already in the tuple at the affected position.
+ .. versionchanged:: 2.5
+ This function used an :c:type:`int` type for *pos*. This might require
+ changes in your code for properly supporting 64-bit systems.
+
.. c:function:: void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o)
@@ -96,6 +137,10 @@ Tuple Objects
is being replaced; any reference in the tuple at position *pos* will be
leaked.
+ .. versionchanged:: 2.5
+ This function used an :c:type:`int` type for *pos*. This might require
+ changes in your code for properly supporting 64-bit systems.
+
.. c:function:: int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)
@@ -107,121 +152,19 @@ Tuple Objects
only more efficiently. Returns ``0`` on success. Client code should never
assume that the resulting value of ``*p`` will be the same as before calling
this function. If the object referenced by ``*p`` is replaced, the original
- ``*p`` is destroyed. On failure, returns ``-1`` and sets ``*p`` to ``NULL``, and
+ ``*p`` is destroyed. On failure, returns ``-1`` and sets ``*p`` to *NULL*, and
raises :exc:`MemoryError` or :exc:`SystemError`.
+ .. versionchanged:: 2.2
+ Removed unused third parameter, *last_is_sticky*.
-.. c:function:: int PyTuple_ClearFreeList()
-
- Clear the free list. Return the total number of freed items.
-
-
-Struct Sequence Objects
------------------------
-
-Struct sequence objects are the C equivalent of :func:`~collections.namedtuple`
-objects, i.e. a sequence whose items can also be accessed through attributes.
-To create a struct sequence, you first have to create a specific struct sequence
-type.
-
-.. c:function:: PyTypeObject* PyStructSequence_NewType(PyStructSequence_Desc *desc)
-
- Create a new struct sequence type from the data in *desc*, described below. Instances
- of the resulting type can be created with :c:func:`PyStructSequence_New`.
-
-
-.. c:function:: void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)
-
- Initializes a struct sequence type *type* from *desc* in place.
-
-
-.. c:function:: int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)
-
- The same as ``PyStructSequence_InitType``, but returns ``0`` on success and ``-1`` on
- failure.
-
- .. versionadded:: 3.4
-
-
-.. c:type:: PyStructSequence_Desc
+ .. versionchanged:: 2.5
+ This function used an :c:type:`int` type for *newsize*. This might
+ require changes in your code for properly supporting 64-bit systems.
- Contains the meta information of a struct sequence type to create.
- +-------------------+------------------------------+--------------------------------------+
- | Field | C Type | Meaning |
- +===================+==============================+======================================+
- | ``name`` | ``const char *`` | name of the struct sequence type |
- +-------------------+------------------------------+--------------------------------------+
- | ``doc`` | ``const char *`` | pointer to docstring for the type |
- | | | or ``NULL`` to omit |
- +-------------------+------------------------------+--------------------------------------+
- | ``fields`` | ``PyStructSequence_Field *`` | pointer to ``NULL``-terminated array |
- | | | with field names of the new type |
- +-------------------+------------------------------+--------------------------------------+
- | ``n_in_sequence`` | ``int`` | number of fields visible to the |
- | | | Python side (if used as tuple) |
- +-------------------+------------------------------+--------------------------------------+
-
-
-.. c:type:: PyStructSequence_Field
-
- Describes a field of a struct sequence. As a struct sequence is modeled as a
- tuple, all fields are typed as :c:type:`PyObject\*`. The index in the
- :attr:`fields` array of the :c:type:`PyStructSequence_Desc` determines which
- field of the struct sequence is described.
-
- +-----------+------------------+-----------------------------------------+
- | Field | C Type | Meaning |
- +===========+==================+=========================================+
- | ``name`` | ``const char *`` | name for the field or ``NULL`` to end |
- | | | the list of named fields, set to |
- | | | :c:data:`PyStructSequence_UnnamedField` |
- | | | to leave unnamed |
- +-----------+------------------+-----------------------------------------+
- | ``doc`` | ``const char *`` | field docstring or ``NULL`` to omit |
- +-----------+------------------+-----------------------------------------+
-
-
-.. c:var:: const char * const PyStructSequence_UnnamedField
-
- Special value for a field name to leave it unnamed.
-
- .. versionchanged:: 3.9
- The type was changed from ``char *``.
-
-
-.. c:function:: PyObject* PyStructSequence_New(PyTypeObject *type)
-
- Creates an instance of *type*, which must have been created with
- :c:func:`PyStructSequence_NewType`.
-
-
-.. c:function:: PyObject* PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
-
- Return the object at position *pos* in the struct sequence pointed to by *p*.
- No bounds checking is performed.
-
-
-.. c:function:: PyObject* PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)
-
- Macro equivalent of :c:func:`PyStructSequence_GetItem`.
-
-
-.. c:function:: void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
-
- Sets the field at index *pos* of the struct sequence *p* to value *o*. Like
- :c:func:`PyTuple_SET_ITEM`, this should only be used to fill in brand new
- instances.
-
- .. note::
-
- This function "steals" a reference to *o*.
-
-
-.. c:function:: void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)
-
- Macro equivalent of :c:func:`PyStructSequence_SetItem`.
+.. c:function:: int PyTuple_ClearFreeList()
- .. note::
+ Clear the free list. Return the total number of freed items.
- This function "steals" a reference to *o*.
+ .. versionadded:: 2.6