迭代器、可迭代对象、生成器

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次)调用,跳转到函数上一次挂起的位置。生成器不仅“记住”了它的数据状态,生成还记住了程序执行的位置。

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

 

posted @ 2023-04-27 16:54  xiao_wlkq  阅读(36)  评论(0)    收藏  举报