Python 迭代器
参考 https://www.jianshu.com/p/36708326ea64
理解迭代器 generator 要清楚一个概念,可以进行for 循环的为可迭代对象Iterable,并不是迭代器,迭代器是指以被 next() 函数调用并不断返回下一个值的对象,表示一个惰性计算的序列。是迭代器一定是可迭代对象,可迭代对象不一定是迭代器。
- Python的for循环本质上就是通过不断调用next()函数实现的
- 可迭代对象:list、tuple、dict、set、str、generator、generator function
- 迭代器:generator、generator function 可以通过iter()函数获得一个Iterator对象
from collections import Iterable,Iterator
a = (i for i in range(10))
isinstance(a,Iterator)
# True
isinstance(a,Iterable)
# True
通过iter()函数获得一个Iterator对象
a = [i for i in range(10)]
a
Out[7]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
isinstance(a,Iterator)
Out[8]: False
isinstance(a,Iterable)
Out[9]: True
isinstance(iter(a),Iterator)
Out[10]: True
def test(a=5):
index = 0
while index < a:
yield index
index += 1
a = test()
isinstance(a,Iterable)
Out[26]: True
isinstance(a,Iterator)
Out[27]: True