是否有针对不可使用的可迭代对象的python类型注释?

时间:2020-03-24 10:24:48

标签: python types

与以下含义相似的事物

def func(arg: Union[List[Any], Tuple[Any]]):
    ...

该类型将适用于所有无法使用的可迭代对象,同时明确排除例如生成器表达式。用法示例为:

def func(arg: NonConsumableIterable[Any]):
    ...

如果这种类型存在并且我忽略了它,那就太好了。但是,如果它不存在,我很想了解为什么它不存在。

1 个答案:

答案 0 :(得分:0)

类型注释Sequence可能是您正在寻找的注释。请注意,如注释中所述,序列与不可消耗的可迭代不同。但是,如果您希望迭代器不消耗,那么很可能还希望该参数支持len__getitem__

来自mypy docs

Iterable用于一般可迭代项(for中可用的任何变量), 和Sequence,其中一个序列(支持len__getitem__)是

在Python词汇表中也定义了sequence

因此,为了回答问题的后续部分,核心库中不存在非消耗型可迭代对象的注释的可能原因是,这不是一个很常见的用例。不过,如果您真的需要一个,可以使用generics

来实现