迭代器

定义:是实现了迭代器协议的对象。迭代器协议指的是对象需要实现两个方法:--iter()--和--next()--这两个都是下划线哦,二者缺一不可。

1.--iter()--:迭代器被创建,这个方法就被调用,返回迭代器对象本身。这个方法使得对象能够被用在for循环以及其他需要迭代器的上下文中

2.--next()--:这个方法会在每次迭代中被调用,返回序列中的下一个元素,如果所有的元素都已经迭代完毕,会抛出一个StopIteration类型的异常,表示迭代完成

注意:迭代器在遍历完之后就会清空 ,访问第二次是访问不到值的

可迭代对象

定义:能够返回一个迭代器的 对象,是实现了--iter()--方法的对象,没有--next()__方法

示例:list即列表他就是一个可迭代对象

总结
1.凡是可作用于for循环的对象都是可迭代对象
2.凡是同时拥有——iter--()和--next--()方法的都是迭代器

生成器

定义:一种特殊的迭代器,他可以在需要时动态生成值,使用yield语句来产生值,可以通过iter来获取产生的值,一般生成器是和函数一起使用

生成器特点:

1.惰性求值:不会再创建时生成所有值,而是逐个生成值;不会立即执行函数里的代码,而是先返回生成器的对象,

2.使用yield关键字:程序会在yield被调用时,生成器才会返回一个值,并且程序暂停执行,直到下一次调用生成器对象的next()方法才会进入函数中并执行函数里面的代码,遇到yield关键字过后,函数的执行将暂停,并将yield后面的表达式作为当前迭代的值返回

3.内存效率:可以处理大型数据结构,不占太多内存

4.迭代器协议:生成器也是迭代器,因此可以用于for循环和其他需要迭代器的代码中