Files
hustoj/web/python-docs/c-api/slice.html
2025-03-09 17:10:56 +08:00

356 lines
23 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.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>切片对象 &#8212; Python 3.8.20 文档</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script src="../_static/translations.js"></script>
<script src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="在 Python 3.8.20 文档 中搜索"
href="../_static/opensearch.xml"/>
<link rel="author" title="关于这些文档" href="../about.html" />
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="copyright" title="版权所有" href="../copyright.html" />
<link rel="next" title="MemoryView 对象" href="memoryview.html" />
<link rel="prev" title="描述符对象" href="descriptor.html" />
<link rel="canonical" href="https://docs.python.org/3/c-api/slice.html" />
<style>
@media only screen {
table.full-width-table {
width: 100%;
}
}
</style>
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
<script type="text/javascript" src="../_static/copybutton.js"></script>
<script type="text/javascript" src="../_static/menu.js"></script>
</head>
<body>
<div class="mobile-nav">
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
<label for="menuToggler" class="toggler__label">
<span></span>
</label>
<nav class="nav-content" role="navigation">
<a href="https://www.python.org/" class="nav-logo">
<img src="../_static/py.svg" alt="Logo"/>
</a>
<div class="version_switcher_placeholder"></div>
<form role="search" class="search" action="../search.html" method="get">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
<path fill-rule="nonzero"
d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" fill="#444"></path>
</svg>
<input type="text" name="q" aria-label="快速搜索"/>
<input type="submit" value="转向"/>
</form>
</nav>
<div class="menu-wrapper">
<nav class="menu" role="navigation" aria-label="main navigation">
<div class="language_switcher_placeholder"></div>
<h3><a href="../contents.html">目录</a></h3>
<ul>
<li><a class="reference internal" href="#">切片对象</a></li>
<li><a class="reference internal" href="#ellipsis-object">Ellipsis 对象</a></li>
</ul>
<h4>上一个主题</h4>
<p class="topless"><a href="descriptor.html"
title="上一章">描述符对象</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="memoryview.html"
title="下一章">MemoryView 对象</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/c-api/slice.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</nav>
</div>
</div>
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
这个文档所针对的是一个已不再受支持的 Python 旧版本。
你应当升级版本,并阅读
<a href="/3/c-api/slice.html"> Python 当前稳定版本的文档</a>.
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
accesskey="I">索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="memoryview.html" title="MemoryView 对象"
accesskey="N">下一页</a> |</li>
<li class="right" >
<a href="descriptor.html" title="描述符对象"
accesskey="P">上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python/C API 参考手册</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="concrete.html" accesskey="U">具体的对象层</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="slice-objects">
<span id="id1"></span><h1>切片对象<a class="headerlink" href="#slice-objects" title="永久链接至标题"></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="sig-name descname">PySlice_Type</code><a class="headerlink" href="#c.PySlice_Type" title="永久链接至目标"></a></dt>
<dd><p>切片对象的类型对象。 它与 Python 层面的 <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> 是相同的对象。</p>
</dd></dl>
<dl class="function">
<dt id="c.PySlice_Check">
int <code class="sig-name 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="永久链接至目标"></a></dt>
<dd><p>如果 <em>ob</em> 是一个 slice 对象则返回真值;<em>ob</em> 必须不为 <code class="docutils literal notranslate"><span class="pre">NULL</span></code></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="sig-name 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="永久链接至目标"></a></dt>
<dd><em class="refcount">Return value: New reference.</em><p>返回一个具有给定值的新切片对象。 <em>start</em>, <em>stop</em><em>step</em> 形参会被用作 slice 对象相应名称的属性的值。 这些值中的任何一个都可以为 <code class="docutils literal notranslate"><span class="pre">NULL</span></code>,在这种情况下将使用 <code class="docutils literal notranslate"><span class="pre">None</span></code> 作为对应属性的值。 如果新对象无法被分配则返回 <code class="docutils literal notranslate"><span class="pre">NULL</span></code></p>
</dd></dl>
<dl class="function">
<dt id="c.PySlice_GetIndices">
int <code class="sig-name 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="永久链接至目标"></a></dt>
<dd><p>从切片对象 <em>slice</em> 提取 start, stop 和 step 索引号,将序列长度视为 <em>length</em>。 大于 <em>length</em> 的序列号将被当作错误。</p>
<p>成功时返回 <code class="docutils literal notranslate"><span class="pre">0</span></code>,出错时返回 <code class="docutils literal notranslate"><span class="pre">-1</span></code> 并且不设置异常(除非某个序列号不为 <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> 且无法被转换为整数,在这种情况下会返回 <code class="docutils literal notranslate"><span class="pre">-1</span></code> 并且设置一个异常)。</p>
<p>你可能不会打算使用此函数。</p>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.2 版更改: </span>之前 <em>slice</em> 形参的形参类型是 <code class="docutils literal notranslate"><span class="pre">PySliceObject*</span></code></p>
</div>
</dd></dl>
<dl class="function">
<dt id="c.PySlice_GetIndicesEx">
int <code class="sig-name 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="永久链接至目标"></a></dt>
<dd><p><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> 的可用替代。 从切片对象 <em>slice</em> 提取 start, stop 和 step 索引号,将序列长度视为 <em>length</em>,并将切片的长度保存在 <em>slicelength</em> 中,超出范围的索引号会以与普通切片一致的方式进行剪切。</p>
<p>成功时返回 <code class="docutils literal notranslate"><span class="pre">0</span></code>,出错时返回 <code class="docutils literal notranslate"><span class="pre">-1</span></code> 并且不设置异常。</p>
<div class="admonition note">
<p class="admonition-title">注解</p>
<p>此函数对于可变大小序列来说是不安全的。 对它的调用应被替换为 <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><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> 的组合,其中</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">if</span><span class="w"> </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="w"> </span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">start</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">stop</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">step</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">slicelength</span><span class="p">)</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// return error</span>
<span class="p">}</span>
</pre></div>
</div>
<p>会被替换为</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">if</span><span class="w"> </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="w"> </span><span class="o">&amp;</span><span class="n">start</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">stop</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">step</span><span class="p">)</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// return error</span>
<span class="p">}</span>
<span class="n">slicelength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PySlice_AdjustIndices</span><span class="p">(</span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">start</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">stop</span><span class="p">,</span><span class="w"> </span><span class="n">step</span><span class="p">);</span>
</pre></div>
</div>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.2 版更改: </span>之前 <em>slice</em> 形参的形参类型是 <code class="docutils literal notranslate"><span class="pre">PySliceObject*</span></code></p>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.6.1 版更改: </span>如果 <code class="docutils literal notranslate"><span class="pre">Py_LIMITED_API</span></code> 未设置或设置为 <code class="docutils literal notranslate"><span class="pre">0x03050400</span></code><code class="docutils literal notranslate"><span class="pre">0x03060000</span></code> 之间的值(不包括边界)或 <code class="docutils literal notranslate"><span class="pre">0x03060100</span></code> 或更大则 <code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_GetIndicesEx()</span></code> 会被实现为一个使用 <code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_Unpack()</span></code><code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_AdjustIndices()</span></code> 的宏。 参数 <em>start</em>, <em>stop</em><em>step</em> 会被多被求值。</p>
</div>
<div class="deprecated">
<p><span class="versionmodified deprecated">3.6.1 版后已移除: </span>如果 <code class="docutils literal notranslate"><span class="pre">Py_LIMITED_API</span></code> 设置为小于 <code class="docutils literal notranslate"><span class="pre">0x03050400</span></code><code class="docutils literal notranslate"><span class="pre">0x03060000</span></code><code class="docutils literal notranslate"><span class="pre">0x03060100</span></code> 之间的值(不包括边界)则 <code class="xref c c-func docutils literal notranslate"><span class="pre">PySlice_GetIndicesEx()</span></code> 为已弃用的函数。</p>
</div>
</dd></dl>
<dl class="function">
<dt id="c.PySlice_Unpack">
int <code class="sig-name 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="永久链接至目标"></a></dt>
<dd><p>从切片对象中将 start, stop 和 step 数据成员提取为 C 整数。 会静默地将大于 <code class="docutils literal notranslate"><span class="pre">PY_SSIZE_T_MAX</span></code> 的值减小为 <code class="docutils literal notranslate"><span class="pre">PY_SSIZE_T_MAX</span></code>,静默地将小于 <code class="docutils literal notranslate"><span class="pre">PY_SSIZE_T_MIN</span></code> 的 start 和 stop 值增大为 <code class="docutils literal notranslate"><span class="pre">PY_SSIZE_T_MIN</span></code>,并静默地将小于 <code class="docutils literal notranslate"><span class="pre">-PY_SSIZE_T_MAX</span></code> 的 step 值增大为 <code class="docutils literal notranslate"><span class="pre">-PY_SSIZE_T_MAX</span></code></p>
<p>出错时返回 <code class="docutils literal notranslate"><span class="pre">-1</span></code>,成功时返回 <code class="docutils literal notranslate"><span class="pre">0</span></code></p>
<div class="versionadded">
<p><span class="versionmodified added">3.6.1 新版功能.</span></p>
</div>
</dd></dl>
<dl class="function">
<dt id="c.PySlice_AdjustIndices">
Py_ssize_t <code class="sig-name 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="永久链接至目标"></a></dt>
<dd><p>将 start/end 切片索引号根据指定的序列长度进行调整。 超出范围的索引号会以与普通切片一致的方式进行剪切。</p>
<p>返回切片的长度。 此操作总是会成功。 不会调用 Python 代码。</p>
<div class="versionadded">
<p><span class="versionmodified added">3.6.1 新版功能.</span></p>
</div>
</dd></dl>
</section>
<section id="ellipsis-object">
<h1>Ellipsis 对象<a class="headerlink" href="#ellipsis-object" title="永久链接至标题"></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="sig-name descname">Py_Ellipsis</code><a class="headerlink" href="#c.Py_Ellipsis" title="永久链接至目标"></a></dt>
<dd><p>Python 的 <code class="docutils literal notranslate"><span class="pre">Ellipsis</span></code> 对象。 该对象没有任何方法。 它必须以与任何其他对象一样的方式遵循引用计数。 它与 <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> 一样属于单例对象。</p>
</dd></dl>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="../contents.html">目录</a></h3>
<ul>
<li><a class="reference internal" href="#">切片对象</a></li>
<li><a class="reference internal" href="#ellipsis-object">Ellipsis 对象</a></li>
</ul>
<h4>上一个主题</h4>
<p class="topless"><a href="descriptor.html"
title="上一章">描述符对象</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="memoryview.html"
title="下一章">MemoryView 对象</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/c-api/slice.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
>索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="memoryview.html" title="MemoryView 对象"
>下一页</a> |</li>
<li class="right" >
<a href="descriptor.html" title="描述符对象"
>上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python/C API 参考手册</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="concrete.html" >具体的对象层</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">版权所有</a> 2001-2024, Python Software Foundation.
<br />
This page is licensed under the Python Software Foundation License Version 2.
<br />
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
<br />
<br />
The Python Software Foundation is a non-profit corporation.
<a href="https://www.python.org/psf/donations/">Please donate.</a>
<br />
<br />
最后更新于 12月 09, 2024.
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
<br />
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.4.4.
</div>
</body>
</html>