python学习【第六篇】python迭代器与生成器
2018-06-18 02:44:41来源:未知 阅读 ()
一、什么是迭代器
1.迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走不能往前退)
2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)
3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如:for循环,sum,min,max函数等)使用迭代器协议访问对象
二、for循环的本质
for循环的本质:循环所有对象,全都是使用迭代器协议
字符串、列表、元祖、字典、集合、文件对象这些都不是可迭代对象(没有遵循迭代器协议,没有next方法),只不过在for循环时调用了内部的__iter__转换成了可迭代对象而已
li = [1, 2, 3] aa = li.__iter__() # 将列表转换为可迭代对象 print(aa) print(aa.__next__()) # 调用next方法 print(aa.__next__()) print(aa.__next__())
注:
for其实做了三件事:
1.将列表转换为可迭代对象
2.调用了__next__()方法
3.将StopIteration异常处理了
三、生成器
可以理解为一种数据类型,这种数据类型自动实现了迭代器协议,所以生成器就是可迭代对象
生成器的创建方式:
- 生成器函数:常规函数定义,但是使用yield语句而不是return语句返回结果;yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行
- 生成器表达式:类似于列表推导,但是生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表
生成器函数
def fun(): print("hhloo") yield 1 print("44444") yield 2 print('dddddd') yield 3 g = fun() # 生成器对象 print(g) # 结果:<generator object fun at 0x00000000010373B8> # 进行一次打印 print(g.__next__()) # 第一次next时调用函数到yield 1处函数返回,结果为hhloo,1 print(g.__next__()) # 第二次会从上一次离开的地方继续往下执行,结果:44444,2 print(g.__next__()) # 第三次执行 结果为:dddddd,3 print(g.__next__()) # 会抛StopIteration异常
生成器表达式
ccc = ('鸡蛋%s' % i for i in range(10)) print(ccc) # <generator object <genexpr> at 0x0000000000A273B8> print(ccc.__next__())
注:
生成器表达式比生成器函数更加的节省内存
生成器注意项
- 生成器在产生的过程中不做任何操作
- 生成器只能遍历一次
def fun1(): for i in range(4): yield i t = fun1() t1 = (i for i in t) t2 = (i for i in t1) print(list(t1)) # [0, 1, 2, 3] print(list(t2)) # []
生成器的优点
- 生成器的好处就是延迟计算,一次返回一个结果,它不会一次生成所有的结果。对于大数据处理,将会非常有用
- 生成器还能有效的提供代码的可读性,使用生成器会使python代码更加的pythonic
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 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