Python 可迭代与序列

Python Iterable vs Sequence

我不明白提示 IterableSequence 时的区别。

这两者之间的主要区别是什么以及何时使用哪个?

我认为 setIterable 而不是 Sequence,是否有任何内置数据类型是 Sequence 而不是 Iterable

def foo(baz: Sequence[float]):
  ...

# What is the difference?
def bar(baz: Iterable[float]):
  ...

SequenceIterable 抽象基础 classes(也可以用作类型注释)遵循 Python 对 sequence and iterable 的定义。具体来说:

  • Iterable 是定义 __iter__ __getitem__.
  • 的任何对象
  • Sequence 是定义 __getitem____len__ 的任何对象。根据定义,任何序列都是可迭代的。 Sequence class 还定义了其他方法,例如 __contains____reversed__ 调用这两个必需的方法。

一些例子:

  • listtuplestr 是最常见的序列。
  • 一些built-in 可迭代对象不是序列。例如,reversed returns 无法下标的 reversed 对象(或 list_reverseiterator 用于列表)。