我发现在Python中,collections.Iterable
和typing.Iterable
都可以在类型注解和检查对象是否可迭代方面使用,即isinstance(obj, collections.Iterable)
和isinstance(obj, typing.Iterable)
都可以。我的问题是,它们之间有什么区别?哪种更适合哪些情况?
我发现在Python中,collections.Iterable
和typing.Iterable
都可以在类型注解和检查对象是否可迭代方面使用,即isinstance(obj, collections.Iterable)
和isinstance(obj, typing.Iterable)
都可以。我的问题是,它们之间有什么区别?哪种更适合哪些情况?
collections.abc.Iterable
类。typing.Iterable
了,并且从typing
导入任何这些容器类型都已经被弃用。typing.Iterable
是泛型的,因此您可以在类型注释中指定它的可迭代项,例如Iterable[int]
表示整数的可迭代项。Iterable
不包括任何这些混入项,但它是其他抽象基类的接口的一部分,这些抽象基类包括这些混入项。简而言之,在类型注释中应使用typing可迭代对象,但将collections可迭代对象用作超类。
typing.List[T]
将被简单地替换为list[T]
。 - BallpointBencollections.abc.Iterable[T]
,只有typing.Iterable[T]
可以,但是API说typing.Iterable[T]
将在3.9中被弃用。我认为这很混乱。 - fishshrimp鱼虾爆栈