如何在 python 中注释切片类型?

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

我想像

slice[int]
一样使用
list[int]
,但是我的IDE告诉我这个用法是无效的。那么如果我想约束其参数的类型,如何注释切片类型呢?

python python-3.x annotations python-typing
2个回答
0
投票

就目前而言,内置的

slice
类型是not generic,所以它没有类型参数(不像
list
)。关于这个(自 2015 年以来)一直存在discussion,相关的
typeshed
issue
仍然悬而未决。 IMO 应该 绝对 通用,但不清楚是否/何时会发生。

slice
参数可以是 any 类型(source)。这意味着一个声明,例如
slice("foo", [-1], object())
将通过
mypy --strict
(即使它的实用性可能有问题)。

这意味着目前没有办法根据其开始/停止/步骤属性类型来约束切片类型变量。

而且因为你甚至不能子类化

slice
,所以甚至没有办法轻松制作你自己的通用切片类型。


-1
投票

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)))

这里有一些更实用的答案:

© www.soinside.com 2019 - 2024. All rights reserved.