1 迭代器简介
需要明白几个概念
- 容器(container):一种把多个元素组织在一起的数据结构,可迭代,可用 in, not in进行判断。可迭代是因为它是可迭代对象,并不是容器本身的特性。
- 可迭代对象(iterable):可迭代对象描述的是对象的一种状态为可迭代 iteration),可以用for循环进行迭代遍历,包括常见的dict、list、set、file、socket等
- 迭代器(iterator):是一个带状态的对象,可用next()方法对其进行操作,并保存当前状态,就是一个懒加载的工厂,等到有人需要的时候才给它生成值返回,没调用的时候就处于休眠状态等待下一次调用。
- 生成器(generator):是一种迭代器,具备迭代器的所有功能
- 列表等(list,dict,set):数据的表达方式,产生容器。
2 迭代器判断标准
- 有iter()方法
- 有next()方法
3 iter() 方法
可将容器对象转换为迭代器(iterator)
只有将list、string等可迭代对象利用iter()方法转换为迭代器才具有next()方法。
4. for i in (iterable)的内部实现
在大多数情况下,我们不会一次次调用next方法去取值,而是通过 for i in (iterable),
注意:in后面的对象如果是一个迭代器,内部因为有iter方法才可以进行操作,所以,迭代器协议里面有iter和next两个方法,否则for语句无法应用。
for循环内部三件事:
1.用iter()转换为迭代器
2.调用next()
3.处理StopIteration
for i in range(10):
print(i) :定时垃圾回收机制:没有引用指向这个对象,则被回收