我很惊讶地读到here"startstep参数默认为None",因为它还说:

slice(start, stop, step=1)

返回表示Range(Start、Stop、Step)指定的一组索引的切片对象.

因此,我预计step参数的默认实参值为1.

我知道slice(a, b, None) == slice(a, b, 1)返回False,但我很好奇slice(a, b, None)是否总是返回与slice(a, b, 1)相同的片,或者是否有一些我想不到的例子,它们将返回不同的片.

我在关于切分here的长篇帖子中找不到任何关于这方面的东西

推荐答案

Slice的步骤确实是defaults to None,但使用步骤1None对于所有实际目的都应该是相同的.这是因为在实际使用该步骤的C代码中,there are checks which transform None into 1 anyway:

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;
    }
    ...
}

如果您想知道为什么它们不直接默认为1,也许是因为用户可能仍然想显式地使用None切片(例如L[1:2:None]),和/或给第三方类型在其__getitem__/__setitem__/__delitem__实现中以不同的方式处理1None的机会.

Python相关问答推荐

不同数据类型的Python成员变量不会在具有相同优先级的不同线程中更新

Odoo onchange for invoice_Status of sale事件.订单未触发

如何判断LazyFrame是否为空?

无法导入已安装的模块

用Python获取HTML Span类中的数据

将numpy矩阵映射到字符串矩阵

使用图片生成PDF Django rest框架

如何在Python中使用ijson解析SON期间检索文件位置?

Python中MongoDB的BSON时间戳

LAB中的增强数组

Locust请求中的Python和参数

Pytest两个具有无限循环和await命令的Deliverc函数

使用miniconda创建环境的问题

未删除映射表的行

在含噪声的3D点网格中识别4连通点模式

driver. find_element无法通过class_name找到元素'""

基于行条件计算(pandas)

Polars将相同的自定义函数应用于组中的多个列,

OpenCV轮廓.很难找到给定图像的所需轮廓

PYTHON、VLC、RTSP.屏幕截图不起作用