迭代器和生成器

mac2022-06-30  73

迭代器

迭代协议:有__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

最新回复(0)