Python迭代器
迭代器协议
对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stopiteration异常,已终止迭代。协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具使用迭代器协议访问对象,遵循迭代器协议的对象就是可迭代对象
可迭代对象
实现了迭代器协议的对象,当数据使用的时候才会把数据加载到内存
字符串、数组、集合、字典、文件对象都不是可迭代对象,只不过是for循环时,调用了他们内部的__iter__方法,把他们变成了可迭代对象
for循环机制
for循环就是基于迭代器协议工作的,首先将“字符串、数组、集合、字典、文件对象”转换成可迭代对象,然后再捕获迭代协议
为何要有for循环?for循环就是基于迭代器机制,提供了一种统一的迭代机制
Eg.1
1 li = [1, 2, 3, 4, 5] 2 new_li = li.__iter__() # 转换成可迭代对象 3 print(new_li.__next__())
eg.2
1 dic = {'a': 1, 'b': 2} 2 it_dic = dic.__iter__() 3 print(it_dic.__next__()) # 返回的就是字典的key值
eg.3 用while模拟for循环机制
1 n_li = li.__iter__() 2 while True: 3 try: 4 print(n_li.__next__()) 5 except StopIteration: 6 print("迭代完成,循环终止了!") 7 break
eg.4
1 print("8" * 15) 2 li = [1, 2, 3, 4] 3 it_li = li.__iter__() # 可迭代对象 4 print(it_li.__next__()) 5 print(next(it_li)) # next()------>it_li.__next__()