迭代器和生成器

迭代器

迭代协议:有__next__()方法的对象会前进带下一个结果,在末尾时会引起StopIteration异常。

迭代器:包含有next方法的实现,在正确范围内返回期待的数据以及超出范围后能够抛出StopIteration的错误停止迭代。

可迭代对象:我们在使用列表、元组、字典、字符串、集合等数据类型时(这些数据类型含有__iter__()方法,可认为是可迭代对象),往往会认为他们就是迭代器,其实并不是,因为它们并没有__next__()方法,那为什么它的确可以迭代呢?因为他们都有一个__iter__()方法可以把他们转化成迭代器。

列表、元组、字符串是序列。有序。

生成器Generator

标志性关键字:yeild

生成器的本质就是迭代器

生成器函数:使用yeild替代了return作为返回值的函数可称作生成器函数

 1 def test():
 2     for i in range(5):
 3         yield i
 4 
 5 t = test()
 6 print(next(t))
 7 print(next(t))
 8 print(next(t))
 9 print(next(t))
10 print(next(t))
11 print(next(t))

结果:

1 0
2 1
3 2
4 3
5 4
6 Traceback (most recent call last):
7   File "F:/pycharm/code/practice/practice1/1.py", line 11, in <module>
8     print(next(t))
9 StopIteration

生成器一次相当于只是产生了一个结果,大大减少了内存的使用

s = (i for i in range(10))
print(type(s))
<class 'generator'>
原文地址:https://www.cnblogs.com/hexiaoqi/p/9348087.html