码迷,mamicode.com
首页 > 其他好文 > 详细

迭代器和生成器

时间:2018-07-21 22:45:07      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:arm   ast   trace   last   ffffff   size   lin   使用   实现   

迭代器

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

 

迭代器和生成器

标签:arm   ast   trace   last   ffffff   size   lin   使用   实现   

原文地址:https://www.cnblogs.com/hexiaoqi/p/9348087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!