Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 1 | .. highlightlang:: c |
| 2 | |
| 3 | .. _slice-objects: |
| 4 | |
| 5 | Slice Objects |
| 6 | ------------- |
| 7 | |
| 8 | |
Sandro Tosi | 98ed08f | 2012-01-14 16:42:02 +0100 | [diff] [blame] | 9 | .. c:var:: PyTypeObject PySlice_Type |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 10 | |
| 11 | .. index:: single: SliceType (in module types) |
| 12 | |
| 13 | The type object for slice objects. This is the same as ``slice`` and |
| 14 | ``types.SliceType``. |
| 15 | |
| 16 | |
Sandro Tosi | 98ed08f | 2012-01-14 16:42:02 +0100 | [diff] [blame] | 17 | .. c:function:: int PySlice_Check(PyObject *ob) |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 18 | |
| 19 | Return true if *ob* is a slice object; *ob* must not be *NULL*. |
| 20 | |
| 21 | |
Sandro Tosi | 98ed08f | 2012-01-14 16:42:02 +0100 | [diff] [blame] | 22 | .. c:function:: PyObject* PySlice_New(PyObject *start, PyObject *stop, PyObject *step) |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 23 | |
| 24 | Return a new slice object with the given values. The *start*, *stop*, and |
Jeroen Ruigrok van der Werven | 84441cc | 2009-04-25 18:31:20 +0000 | [diff] [blame] | 25 | *step* parameters are used as the values of the slice object attributes of |
| 26 | the same names. Any of the values may be *NULL*, in which case the |
| 27 | ``None`` will be used for the corresponding attribute. Return *NULL* if |
| 28 | the new object could not be allocated. |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 29 | |
| 30 | |
Sandro Tosi | 98ed08f | 2012-01-14 16:42:02 +0100 | [diff] [blame] | 31 | .. c:function:: int PySlice_GetIndices(PySliceObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step) |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 32 | |
| 33 | Retrieve the start, stop and step indices from the slice object *slice*, |
Jeroen Ruigrok van der Werven | 84441cc | 2009-04-25 18:31:20 +0000 | [diff] [blame] | 34 | assuming a sequence of length *length*. Treats indices greater than |
| 35 | *length* as errors. |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 36 | |
Serhiy Storchaka | d585c52 | 2016-10-27 21:41:04 +0300 | [diff] [blame] | 37 | Returns ``0`` on success and ``-1`` on error with no exception set (unless one of |
Jeroen Ruigrok van der Werven | 84441cc | 2009-04-25 18:31:20 +0000 | [diff] [blame] | 38 | the indices was not :const:`None` and failed to be converted to an integer, |
Serhiy Storchaka | d585c52 | 2016-10-27 21:41:04 +0300 | [diff] [blame] | 39 | in which case ``-1`` is returned with an exception set). |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 40 | |
Jeroen Ruigrok van der Werven | 84441cc | 2009-04-25 18:31:20 +0000 | [diff] [blame] | 41 | You probably do not want to use this function. If you want to use slice |
| 42 | objects in versions of Python prior to 2.3, you would probably do well to |
Sandro Tosi | 98ed08f | 2012-01-14 16:42:02 +0100 | [diff] [blame] | 43 | incorporate the source of :c:func:`PySlice_GetIndicesEx`, suitably renamed, |
Jeroen Ruigrok van der Werven | 84441cc | 2009-04-25 18:31:20 +0000 | [diff] [blame] | 44 | in the source of your extension. |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 45 | |
Jeroen Ruigrok van der Werven | 2391918 | 2009-04-25 18:46:03 +0000 | [diff] [blame] | 46 | .. versionchanged:: 2.5 |
Sandro Tosi | 98ed08f | 2012-01-14 16:42:02 +0100 | [diff] [blame] | 47 | This function used an :c:type:`int` type for *length* and an |
| 48 | :c:type:`int *` type for *start*, *stop*, and *step*. This might require |
Jeroen Ruigrok van der Werven | 2391918 | 2009-04-25 18:46:03 +0000 | [diff] [blame] | 49 | changes in your code for properly supporting 64-bit systems. |
| 50 | |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 51 | |
Sandro Tosi | 98ed08f | 2012-01-14 16:42:02 +0100 | [diff] [blame] | 52 | .. c:function:: int PySlice_GetIndicesEx(PySliceObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength) |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 53 | |
Sandro Tosi | 98ed08f | 2012-01-14 16:42:02 +0100 | [diff] [blame] | 54 | Usable replacement for :c:func:`PySlice_GetIndices`. Retrieve the start, |
Jeroen Ruigrok van der Werven | 84441cc | 2009-04-25 18:31:20 +0000 | [diff] [blame] | 55 | stop, and step indices from the slice object *slice* assuming a sequence of |
| 56 | length *length*, and store the length of the slice in *slicelength*. Out |
| 57 | of bounds indices are clipped in a manner consistent with the handling of |
| 58 | normal slices. |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 59 | |
Serhiy Storchaka | d585c52 | 2016-10-27 21:41:04 +0300 | [diff] [blame] | 60 | Returns ``0`` on success and ``-1`` on error with exception set. |
Georg Brandl | f684272 | 2008-01-19 22:08:21 +0000 | [diff] [blame] | 61 | |
| 62 | .. versionadded:: 2.3 |
Jeroen Ruigrok van der Werven | 2391918 | 2009-04-25 18:46:03 +0000 | [diff] [blame] | 63 | |
| 64 | .. versionchanged:: 2.5 |
Sandro Tosi | 98ed08f | 2012-01-14 16:42:02 +0100 | [diff] [blame] | 65 | This function used an :c:type:`int` type for *length* and an |
| 66 | :c:type:`int *` type for *start*, *stop*, *step*, and *slicelength*. This |
Jeroen Ruigrok van der Werven | 2391918 | 2009-04-25 18:46:03 +0000 | [diff] [blame] | 67 | might require changes in your code for properly supporting 64-bit |
| 68 | systems. |
Michael Seifert | 0b46fcf | 2017-04-15 04:04:22 +0200 | [diff] [blame] | 69 | |
| 70 | |
| 71 | Ellipsis Object |
| 72 | --------------- |
| 73 | |
| 74 | |
| 75 | .. c:var:: PyObject *Py_Ellipsis |
| 76 | |
| 77 | The Python ``Ellipsis`` object. This object has no methods. It needs to be |
| 78 | treated just like any other object with respect to reference counts. Like |
| 79 | :c:data:`Py_None` it is a singleton object. |