Python 可迭代与序列
Python Iterable vs Sequence
我不明白提示 Iterable
和 Sequence
时的区别。
这两者之间的主要区别是什么以及何时使用哪个?
我认为 set
是 Iterable
而不是 Sequence
,是否有任何内置数据类型是 Sequence
而不是 Iterable
?
def foo(baz: Sequence[float]):
...
# What is the difference?
def bar(baz: Iterable[float]):
...
Sequence
和 Iterable
抽象基础 classes(也可以用作类型注释)遵循 Python 对 sequence and iterable 的定义。具体来说:
- Iterable 是定义
__iter__
或 __getitem__
. 的任何对象
- Sequence 是定义
__getitem__
和 __len__
的任何对象。根据定义,任何序列都是可迭代的。 Sequence
class 还定义了其他方法,例如 __contains__
、__reversed__
调用这两个必需的方法。
一些例子:
list
、tuple
、str
是最常见的序列。
- 一些built-in 可迭代对象不是序列。例如,
reversed
returns 无法下标的 reversed
对象(或 list_reverseiterator
用于列表)。
我不明白提示 Iterable
和 Sequence
时的区别。
这两者之间的主要区别是什么以及何时使用哪个?
我认为 set
是 Iterable
而不是 Sequence
,是否有任何内置数据类型是 Sequence
而不是 Iterable
?
def foo(baz: Sequence[float]):
...
# What is the difference?
def bar(baz: Iterable[float]):
...
Sequence
和 Iterable
抽象基础 classes(也可以用作类型注释)遵循 Python 对 sequence and iterable 的定义。具体来说:
- Iterable 是定义
__iter__
或__getitem__
. 的任何对象
- Sequence 是定义
__getitem__
和__len__
的任何对象。根据定义,任何序列都是可迭代的。Sequence
class 还定义了其他方法,例如__contains__
、__reversed__
调用这两个必需的方法。
一些例子:
list
、tuple
、str
是最常见的序列。- 一些built-in 可迭代对象不是序列。例如,
reversed
returns 无法下标的reversed
对象(或list_reverseiterator
用于列表)。