有限迭代的类型提示

Type Hint for finite iterable

我的函数 foo 接受一个参数 things,它在内部变成了一个列表。

def foo(things):
    things = list(things)
    # more code

list 构造函数接受任何可迭代对象。

然而,用 typing.Iterable 注释 things 并没有给用户一个线索,即可迭代对象必须是有限的,而不是像 itertools.count().

这样的东西

在这种情况下使用的正确类型提示是什么?

我不知道在 Python 中实现此目的的任何可能方法,因为您不能在类型提示中提供此类约束。


但是,Collection 类型可能在您的上下文中作为解决方法很有用:

class collections.abc.Collection

ABC for sized iterable container classes.

这要求对象具有 __len__,这是比有限更严格的要求。例如,有限生成器不算作 Collection.