python 3.x 学习笔记6 ( 迭代器 and 生成器 )
2018-06-18 00:54:08来源:未知 阅读 ()
1.迭代器(Iterator):
可以被next()函数调用并不断返回下一个值的对象,成为迭代器:Iterator
可以直接用于for 循环的对象统称为可迭代对象:Iterable
迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样)。迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序列的第一个元素开始访问,直到所有的元素都被访问才结束。但是迭代器只能前进不能后退
优点:
使用迭代器不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大甚至无限的序列。
2.生成器:
只有调用时才会生成相应的数据,且只有一个__next__()方法
如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。
创建方法:
1)最简单的是把一个列表生成式的[]改成(),就创建了一个generator
2)可以把函数变成generator object,只需要把print()改为yield 即可。
3.
yeild 作用:保存当前状态并返回
send()作用:唤醒并传递一个值
__next__()作用:只是唤醒
4.
生成器都是Iterator对象,但是list、低产田、str虽然是Iterable,却不是Iterator,把list、dict、str等Iterable变成Iterator可以使用iter()函数。
5.通过yield将斐波那契函数变成生成器
1 def fib(max): 2 n,a,b = 0,0,1 3 while n < max: 4 yield b #将函数变成生成器 5 a,b = b,a+b 6 n += 1 7 return 'lalalalal' 8 9 f = fib(10) 10 11 while True: 12 try13 x = next(f) #相当于执行一次函数fib() 14 print(x) 15 except StopIteration as e: 16 print('Generator return value is %s '%e.value) #e的value是函数返回值如fib函数的返回值'lalalalal' 17 break
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Day03——Python函数
下一篇:VUE 框架
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash