切片(开始,停止,无)与切片(开始,停止,1)

问题描述 投票:0回答:1

我很惊讶地在here读到“

start
step
参数默认为
None
”,因为它还说:

slice(start, stop, step=1)

“返回一个切片对象,表示由范围(开始、停止、步长)指定的索引集。”

所以我预计

step
参数的默认参数值为
1

我知道

slice(a, b, None) == slice(a, b, 1)
返回
False
,但我很好奇
slice(a, b, None)
是否总是返回与
slice(a, b, 1)
相同的切片,或者是否有一些我无法想到的示例返回不同的切片。

我在有关切片的大量帖子中找不到任何相关内容这里

python slice
1个回答
0
投票

Slice 的步骤确实默认为

None
,但使用步骤
1
None
对于所有实际目的来说应该是等效的。这是因为在实际使用该步骤的 C 代码中,存在将
None
转换为
1
的检查

int
PySlice_GetIndices(PyObject *_r, Py_ssize_t length,
                   Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
{
    PySliceObject *r = (PySliceObject*)_r;
    if (r->step == Py_None) {
        *step = 1;
    ...    
}

并且:

int
PySlice_Unpack(PyObject *_r,
               Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
{
    PySliceObject *r = (PySliceObject*)_r;
    ...
    if (r->step == Py_None) {
        *step = 1;
    }
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.