迭代器、可迭代对象、生成器
1、迭代器
概念:迭代器可以记住遍历的位置,从第一个元素开始访问,知道所有元素访问结束,只能往前,不能后退。
iter("abc") --> 返回迭代器对象(包含了__next__()方法)--> __next__() 逐一访问'abc'中的元素;
当元素用尽时,__next__() 触发 StopIteration异常来通知终止 for 循环。

2、可迭代对象
概念:如果一个对象实现了__iter__(), 这么这个对象就是可迭代对象
可迭代对象,不一定能被迭代,不一定是迭代器。
(1) 不可迭代对象, 没有__iter__() 方法

(2) 可迭代对象, 有__iter__() 方法,但不是迭代器

(3) 迭代器有__iter__() 方法和__next__()

结论:迭代器一定是可迭代对象,可迭代对象不一定是迭代器
(4) 手写可迭代器,遍历列表


2、生成器
概念:生成器本身是一种特殊的迭代器,函数体中包含 yield 语句的函数,返回的是生成器对象。
生成器中有__iter__和__next__方法
生成器会自动实现迭代器协议,也就是说只要我们yield后,自动就生成了next对象包括StopIteration等结构.
生成器使用yield语句返回一个值。yield语句挂起该生成器函数的状态,保留足够的信息。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。生成器不仅“记住”了它的数据状态,生成还记住了程序执行的位置。


列表推导式和生成器表达式


浙公网安备 33010602011771号