python-project/python-3.7.4-docs-html/c-api/slice.html
Caleb Fontenot 335515d331 add files
2019-07-15 09:16:41 -07:00

311 lines
20 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Slice Objects &#8212; Python 3.7.4 documentation</title>
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/language_data.js"></script>
<script type="text/javascript" src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="Search within Python 3.7.4 documentation"
href="../_static/opensearch.xml"/>
<link rel="author" title="About these documents" href="../about.html" />
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="copyright" title="Copyright" href="../copyright.html" />
<link rel="next" title="MemoryView objects" href="memoryview.html" />
<link rel="prev" title="Descriptor Objects" href="descriptor.html" />
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
<link rel="canonical" href="https://docs.python.org/3/c-api/slice.html" />
<script type="text/javascript" src="../_static/copybutton.js"></script>
<script type="text/javascript" src="../_static/switchers.js"></script>
<style>
@media only screen {
table.full-width-table {
width: 100%;
}
}
</style>
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="memoryview.html" title="MemoryView objects"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="descriptor.html" title="Descriptor Objects"
accesskey="P">previous</a> |</li>
<li><img src="../_static/py.png" alt=""
style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li>
<span class="language_switcher_placeholder">en</span>
<span class="version_switcher_placeholder">3.7.4</span>
<a href="../index.html">Documentation </a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python/C API Reference Manual</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="concrete.html" accesskey="U">Concrete Objects Layer</a> &#187;</li>
<li class="right">
<div class="inline-search" style="display: none" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="Quick search" type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('.inline-search').show(0);</script>
|
</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="slice-objects">
<span id="id1"></span><h1>Slice Objects<a class="headerlink" href="#slice-objects" title="Permalink to this headline"></a></h1>
<dl class="var">
<dt id="c.PySlice_Type">
<a class="reference internal" href="type.html#c.PyTypeObject" title="PyTypeObject">PyTypeObject</a> <code class="descname">PySlice_Type</code><a class="headerlink" href="#c.PySlice_Type" title="Permalink to this definition"></a></dt>
<dd><p>The type object for slice objects. This is the same as <a class="reference internal" href="../library/functions.html#slice" title="slice"><code class="xref py py-class docutils literal notranslate"><span class="pre">slice</span></code></a> in the
Python layer.</p>
</dd></dl>
<dl class="function">
<dt id="c.PySlice_Check">
int <code class="descname">PySlice_Check</code><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject">PyObject</a><em> *ob</em><span class="sig-paren">)</span><a class="headerlink" href="#c.PySlice_Check" title="Permalink to this definition"></a></dt>
<dd><p>Return true if <em>ob</em> is a slice object; <em>ob</em> must not be <em>NULL</em>.</p>
</dd></dl>
<dl class="function">
<dt id="c.PySlice_New">
<a class="reference internal" href="structures.html#c.PyObject" title="PyObject">PyObject</a>* <code class="descname">PySlice_New</code><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject">PyObject</a><em> *start</em>, <a class="reference internal" href="structures.html#c.PyObject" title="PyObject">PyObject</a><em> *stop</em>, <a class="reference internal" href="structures.html#c.PyObject" title="PyObject">PyObject</a><em> *step</em><span class="sig-paren">)</span><a class="headerlink" href="#c.PySlice_New" title="Permalink to this definition"></a></dt>
<dd><em class="refcount">Return value: New reference.</em><p>Return a new slice object with the given values. The <em>start</em>, <em>stop</em>, and
<em>step</em> parameters are used as the values of the slice object attributes of
the same names. Any of the values may be <em>NULL</em>, in which case the
<code class="docutils literal notranslate"><span class="pre">None</span></code> will be used for the corresponding attribute. Return <em>NULL</em> if
the new object could not be allocated.</p>
</dd></dl>
<dl class="function">
<dt id="c.PySlice_GetIndices">
int <code class="descname">PySlice_GetIndices</code><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject">PyObject</a><em> *slice</em>, Py_ssize_t<em> length</em>, Py_ssize_t<em> *start</em>, Py_ssize_t<em> *stop</em>, Py_ssize_t<em> *step</em><span class="sig-paren">)</span><a class="headerlink" href="#c.PySlice_GetIndices" title="Permalink to this definition"></a></dt>
<dd><p>Retrieve the start, stop and step indices from the slice object <em>slice</em>,
assuming a sequence of length <em>length</em>. Treats indices greater than
<em>length</em> as errors.</p>
<p>Returns <code class="docutils literal notranslate"><span class="pre">0</span></code> on success and <code class="docutils literal notranslate"><span class="pre">-1</span></code> on error with no exception set (unless one of
the indices was not <a class="reference internal" href="../library/constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a> and failed to be converted to an integer,
in which case <code class="docutils literal notranslate"><span class="pre">-1</span></code> is returned with an exception set).</p>
<p>You probably do not want to use this function.</p>
<div class="versionchanged">
<p><span class="versionmodified changed">Changed in version 3.2: </span>The parameter type for the <em>slice</em> parameter was <code class="docutils literal notranslate"><span class="pre">PySliceObject*</span></code>
before.</p>
</div>
</dd></dl>
<dl class="function">
<dt id="c.PySlice_GetIndicesEx">
int <code class="descname">PySlice_GetIndicesEx</code><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject">PyObject</a><em> *slice</em>, Py_ssize_t<em> length</em>, Py_ssize_t<em> *start</em>, Py_ssize_t<em> *stop</em>, Py_ssize_t<em> *step</em>, Py_ssize_t<em> *slicelength</em><span class="sig-paren">)</span><a class="headerlink" href="#c.PySlice_GetIndicesEx" title="Permalink to this definition"></a></dt>
<dd><p>Usable replacement for <a class="reference internal" href="#c.PySlice_GetIndices" title="PySlice_GetIndices"><code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_GetIndices()</span></code></a>. Retrieve the start,
stop, and step indices from the slice object <em>slice</em> assuming a sequence of
length <em>length</em>, and store the length of the slice in <em>slicelength</em>. Out
of bounds indices are clipped in a manner consistent with the handling of
normal slices.</p>
<p>Returns <code class="docutils literal notranslate"><span class="pre">0</span></code> on success and <code class="docutils literal notranslate"><span class="pre">-1</span></code> on error with exception set.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This function is considered not safe for resizable sequences.
Its invocation should be replaced by a combination of
<a class="reference internal" href="#c.PySlice_Unpack" title="PySlice_Unpack"><code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_Unpack()</span></code></a> and <a class="reference internal" href="#c.PySlice_AdjustIndices" title="PySlice_AdjustIndices"><code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_AdjustIndices()</span></code></a> where</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="p">(</span><span class="n">PySlice_GetIndicesEx</span><span class="p">(</span><span class="n">slice</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">start</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">stop</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">step</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">slicelength</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// return error</span>
<span class="p">}</span>
</pre></div>
</div>
<p>is replaced by</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="p">(</span><span class="n">PySlice_Unpack</span><span class="p">(</span><span class="n">slice</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">start</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">stop</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">step</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// return error</span>
<span class="p">}</span>
<span class="n">slicelength</span> <span class="o">=</span> <span class="n">PySlice_AdjustIndices</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">start</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">stop</span><span class="p">,</span> <span class="n">step</span><span class="p">);</span>
</pre></div>
</div>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">Changed in version 3.2: </span>The parameter type for the <em>slice</em> parameter was <code class="docutils literal notranslate"><span class="pre">PySliceObject*</span></code>
before.</p>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">Changed in version 3.6.1: </span>If <code class="docutils literal notranslate"><span class="pre">Py_LIMITED_API</span></code> is not set or set to the value between <code class="docutils literal notranslate"><span class="pre">0x03050400</span></code>
and <code class="docutils literal notranslate"><span class="pre">0x03060000</span></code> (not including) or <code class="docutils literal notranslate"><span class="pre">0x03060100</span></code> or higher
<code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_GetIndicesEx()</span></code> is implemented as a macro using
<code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_Unpack()</span></code> and <code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_AdjustIndices()</span></code>.
Arguments <em>start</em>, <em>stop</em> and <em>step</em> are evaluated more than once.</p>
</div>
<div class="deprecated">
<p><span class="versionmodified deprecated">Deprecated since version 3.6.1: </span>If <code class="docutils literal notranslate"><span class="pre">Py_LIMITED_API</span></code> is set to the value less than <code class="docutils literal notranslate"><span class="pre">0x03050400</span></code> or
between <code class="docutils literal notranslate"><span class="pre">0x03060000</span></code> and <code class="docutils literal notranslate"><span class="pre">0x03060100</span></code> (not including)
<code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_GetIndicesEx()</span></code> is a deprecated function.</p>
</div>
</dd></dl>
<dl class="function">
<dt id="c.PySlice_Unpack">
int <code class="descname">PySlice_Unpack</code><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject">PyObject</a><em> *slice</em>, Py_ssize_t<em> *start</em>, Py_ssize_t<em> *stop</em>, Py_ssize_t<em> *step</em><span class="sig-paren">)</span><a class="headerlink" href="#c.PySlice_Unpack" title="Permalink to this definition"></a></dt>
<dd><p>Extract the start, stop and step data members from a slice object as
C integers. Silently reduce values larger than <code class="docutils literal notranslate"><span class="pre">PY_SSIZE_T_MAX</span></code> to
<code class="docutils literal notranslate"><span class="pre">PY_SSIZE_T_MAX</span></code>, silently boost the start and stop values less than
<code class="docutils literal notranslate"><span class="pre">PY_SSIZE_T_MIN</span></code> to <code class="docutils literal notranslate"><span class="pre">PY_SSIZE_T_MIN</span></code>, and silently boost the step
values less than <code class="docutils literal notranslate"><span class="pre">-PY_SSIZE_T_MAX</span></code> to <code class="docutils literal notranslate"><span class="pre">-PY_SSIZE_T_MAX</span></code>.</p>
<p>Return <code class="docutils literal notranslate"><span class="pre">-1</span></code> on error, <code class="docutils literal notranslate"><span class="pre">0</span></code> on success.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 3.6.1.</span></p>
</div>
</dd></dl>
<dl class="function">
<dt id="c.PySlice_AdjustIndices">
Py_ssize_t <code class="descname">PySlice_AdjustIndices</code><span class="sig-paren">(</span>Py_ssize_t<em> length</em>, Py_ssize_t<em> *start</em>, Py_ssize_t<em> *stop</em>, Py_ssize_t<em> step</em><span class="sig-paren">)</span><a class="headerlink" href="#c.PySlice_AdjustIndices" title="Permalink to this definition"></a></dt>
<dd><p>Adjust start/end slice indices assuming a sequence of the specified length.
Out of bounds indices are clipped in a manner consistent with the handling
of normal slices.</p>
<p>Return the length of the slice. Always successful. Doesnt call Python
code.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 3.6.1.</span></p>
</div>
</dd></dl>
</div>
<div class="section" id="ellipsis-object">
<h1>Ellipsis Object<a class="headerlink" href="#ellipsis-object" title="Permalink to this headline"></a></h1>
<dl class="var">
<dt id="c.Py_Ellipsis">
<a class="reference internal" href="structures.html#c.PyObject" title="PyObject">PyObject</a> *<code class="descname">Py_Ellipsis</code><a class="headerlink" href="#c.Py_Ellipsis" title="Permalink to this definition"></a></dt>
<dd><p>The Python <code class="docutils literal notranslate"><span class="pre">Ellipsis</span></code> object. This object has no methods. It needs to be
treated just like any other object with respect to reference counts. Like
<a class="reference internal" href="none.html#c.Py_None" title="Py_None"><code class="xref c c-data docutils literal notranslate"><span class="pre">Py_None</span></code></a> it is a singleton object.</p>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="../contents.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Slice Objects</a></li>
<li><a class="reference internal" href="#ellipsis-object">Ellipsis Object</a></li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="descriptor.html"
title="previous chapter">Descriptor Objects</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="memoryview.html"
title="next chapter">MemoryView objects</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">Report a Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.7/Doc/c-api/slice.rst"
rel="nofollow">Show Source
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="memoryview.html" title="MemoryView objects"
>next</a> |</li>
<li class="right" >
<a href="descriptor.html" title="Descriptor Objects"
>previous</a> |</li>
<li><img src="../_static/py.png" alt=""
style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li>
<span class="language_switcher_placeholder">en</span>
<span class="version_switcher_placeholder">3.7.4</span>
<a href="../index.html">Documentation </a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python/C API Reference Manual</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="concrete.html" >Concrete Objects Layer</a> &#187;</li>
<li class="right">
<div class="inline-search" style="display: none" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="Quick search" type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('.inline-search').show(0);</script>
|
</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">Copyright</a> 2001-2019, Python Software Foundation.
<br />
The Python Software Foundation is a non-profit corporation.
<a href="https://www.python.org/psf/donations/">Please donate.</a>
<br />
Last updated on Jul 13, 2019.
<a href="../bugs.html">Found a bug</a>?
<br />
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 2.0.1.
</div>
</body>
</html>