我想像
slice[int]
一样使用list[int]
,但是我的IDE告诉我这个用法是无效的。那么如果我想约束其参数的类型,如何注释切片类型呢?
就目前而言,内置的
slice
类型是not generic,所以它没有类型参数(不像list
)。关于这个(自 2015 年以来)一直存在discussion,相关的typeshed
issue 仍然悬而未决。 IMO 应该 绝对 通用,但不清楚是否/何时会发生。
slice
参数可以是 any 类型(source)。这意味着一个声明,例如slice("foo", [-1], object())
将通过 mypy --strict
(即使它的实用性可能有问题)。
这意味着目前没有办法根据其开始/停止/步骤属性类型来约束切片类型变量。
而且因为你甚至不能子类化
slice
,所以甚至没有办法轻松制作你自己的通用切片类型。
slice[int]
是不对的,因为 slice 对象 本身就是内置类
在我看来,将
slice
对象类型提示为 slice
是正确的
from typing import Iterable
def slice_it(some_iterable: Iterable, slicer: slice) -> Iterable:
return some_iterable[slicer]
some_list = [1, 2, 3, 4, 5, 6]
print(slice_it(some_list, slice(1, 3)))
这里有一些更实用的答案: