• Index

#### 迭代器

Last updated: ... / Reads: 188134554 Edit

``````>>> from collections.abc import Iterable
>>> isinstance([], Iterable)
True
>>> isinstance({}, Iterable)
True
>>> isinstance('abc', Iterable)
True
>>> isinstance((x for x in range(10)), Iterable)
True
>>> isinstance(100, Iterable)
False
``````

``````>>> from collections.abc import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance('abc', Iterator)
False
``````

`list``dict``str``Iterable`变成`Iterator`可以使用`iter()`函数：

``````>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True
``````

`Iterator`甚至可以表示一个无限大的数据流，例如全体自然数。而使用list是永远不可能存储全体自然数的。

### 小结

Python的`for`循环本质上就是通过不断调用`next()`函数实现的，例如：

``````for x in [1, 2, 3, 4, 5]:
pass
``````

``````# 首先获得Iterator对象:
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:
try:
# 获得下一个值:
x = next(it)
except StopIteration:
# 遇到StopIteration就退出循环
break
``````

do_iter.py