一、迭代器
1.什么是迭代?
迭代是可以通过遍历的方式依次把某个对象的元素取出。python中,迭代是通过使用for....in....语句完成的
介绍迭代器之前 先来说一下可迭代对象~~~
可以被用作for语句的对象称为可迭代对象,如:集合,生成器
如下示例:可以判断哪些数据类型属于可迭代对象(Iterable)
那这些数据类型属于可迭代对象,但是它属于迭代器吗?下面来进行验证
由此可见,迭代对象不是迭代器 。
2.什么是迭代器?
可以被next函数调用并不断返回下一个值的对象被称为迭代器(iterator),迭代器会记住遍历对象的位置,迭代器只会前进不会后退。
3.如何将迭代对象转化为迭代器?
迭代对象转化为迭代器,可以通过Iter()函数实现。
如下示例:
不是可迭代对象转化为迭代器会报错:
由此可见,迭代对象不一定是迭代器,但迭代器一定是迭代对象
4.迭代器中有两个基本方法:iter(),next()。使用iter函数创建一个迭代器后,就可以通过next函数获取迭代器的下一个值,如果通过next()不断调用并返回下一个值,那么等到最后没有下一个值了,就会抛出异常:StopIteration
如下示例:
python中,for 语句本质是调用next实现的 如下所示:
5. for语句可以循环可迭代对象,迭代器和生成器,所以这里我们可以用for语句循环类对象。但是我们需要在类中写两个魔术方法,__iter__和__next__,如果没有写,则会报错,如下所示:
增加魔术方法 __iter__和__next__
二、生成器
生成器(generator)也是用在迭代操作中,其本质上可以理解为一个特殊的迭代器,生成器具有和迭代器一样的特性。但是它们在实现方式上不一样。我们可以通过两种方式创建生成器:生成器表达式,生成器函数。
1.生成器表达式
将列表推导式的[]改为()就是生成器表达式,列表推导式返回的是一个列表对象,生成器表达式返回的是一个生成器对象。
生成器表达式:
2.生成器函数yield