题目:
迭代器和生成器有什么区别?
参考回答:
1、迭代器
迭代器是一个带状态的对象,它能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和 __next__方法的对象都是都是迭代器。
- __iter__方法返回迭代器自身
- __next__方法返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常。
所以,迭代器就是实现了工厂模式的对象,他在你每次询问要下一个值的时候返回给你。
2、生成器
生成器(Generator)是创建迭代器的简单而强大的工具。他们写起来就像是正规的函数,只是在需要返回数据的时候使用yield语句。
每次next()被调用时,生成器会返回它脱离的位置(最后一次执行的位置和所有的数据值)
3、区别
生成器能做到迭代器能做的所有事,而且因为自动创建了__iter__和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。
除了创建和保存程序状态的自动方法,当发生生器终结时,还会自动抛出StopIteration异常。