有限迭代的类型提示
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
.
我的函数 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
.