迭代器 生成器

可迭代的:对象有__iter__方法的都是可迭代对象
 
 
为什么要用迭代器
1.迭代器提供一件依赖于索引的取值方式 ,这样就可以遍历那些1没有索引的可迭代对象(字典,集合)
2.迭代器与列表比较,迭代器更节省内存
 
缺点:
1.无法索引迭代器的长度,使用不如列表索引取值灵活
2. 一次性的,只能住后取值,不能往前
 
迭代器next 就可以取值

 

 

总结yield的功能:
1.相当于把__iter__和__next__方法封装到函数内部
2.与return比,return只能返回一次,而yield能返回多次
3.函数暂停已经继续运行的状态是通过yield保存的

 

 

#e.send与next(e)的区别
#1.如果函数内yield是表达式形式,那么必须先next(e)
#2.二者的共同之处是都可以让函数在上次暂停的位置继续运行,不一样的地方在于
send在触发下一次代码的执行时,会顺便给yield传一个值

e=eater('铁骨')
next(e)
e.send('包子')
e.send('豆子')
posted @ 2017-10-01 19:29  天涯客2017  阅读(107)  评论(0编辑  收藏  举报