迭代器
Python中一个实现_iter_方法和_next_方法的类对象,就是迭代器。
是一个能记住遍历位置的对象,遍历时只能往前,不能后退。迭代器常用方法有 iter() 和 next().
把一个类作为迭代器使用需要在类中实现两个函数:__iter__() 和 __next__().
生成器
Python 中使用了 yield 的函数称为生成器,生成器函数返回一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
生成器函数自动实现了迭代器协议,能更方便地实现。
生成器函数 和 生成器表达式都可以提供生成器,只需要简单地将列表推导的中括号替换成圆括号即可
二者区别
1.迭代器是访问容器的一种方式,也就是说容器已经出现。我们是从已有元素拓印出一份副本,只为我们此次迭代使用。而生成器则是,而生成器则是自己生成元素的。
2.在用法上生成器只需要简单函数写法,配合yield就能实现。而迭代器真正开发中很难使用到。我们可以把生成器看做,python给我们提供的特殊接口实现的迭代器。
3.生成器是只能遍历一次的。
为什么使用生成器
Python使用生成器对延迟操作提供了支持。在需要的时候才产生结果,而不是立即产生结果。
1、节省资源消耗,和声明序列不同的是生成器在不使用的时候几乎不占内存,也没有声明计算过程!
2、使用的时候,生成器是随用随生成,用完即刻释放,非常高效!
3、可在单线程下实现并发运算处理效果。
yeild 与 return的区别
相同点:都是返回函数执行的结果
不同点:return 在返回结果后结束函数的运行,而yield 则是让函数变成一个生成器,生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值