【发布时间】:2017-01-18 20:53:20
【问题描述】:
我刚刚改进了必须支持切片的 library 的测试覆盖率,我注意到切片可以包含非整数类型:
>>> slice(1, "2", 3.0)
slice(1, '2', 3.0)
>>> sl = slice(1, "2", 3.0)
>>> [1,2,3][sl]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: slice indices must be integers or None or have an __index__ method
这可能只是我的静态类型背景,但我觉得很奇怪没有__index__ 的内置类型可以在没有TypeError 的情况下传入这里。为什么会这样?假设允许任意类型以支持实现__index__ 的类型的鸭子类型,我是否正确?对于最常用的情况,是否由于性能原因而缺少类型检查?
在PEP 357 之前,示例中的切片是否无效?
【问题讨论】:
-
带浮点数的切片语法可以有效地描述 n 维空间中的边界框,这在某些情况下会很方便。自定义类型可以接受这样的切片。
-
这是一个非常有趣的浮动用例,我没有想到。为什么允许使用字符串?
-
你也可以在切片中使用Ellipsis。
-
@LaurentLAPORTE:你可以使用省略号;不过,我从未见过它完成。在 NumPy 中,
a[3, ..., 5]之类的东西,...不是切片的一部分。 -
@Mark Dickinson:我不记得我在哪里看到的,但省略号仅用于 Numpy ;-)
标签: python python-3.x slice python-internals