迭代器
from collections import Iterable #检测一个对象是否可迭代
# ‘——iter——’这个方法导致了一个数据类型的可迭代
iter
#只要包含了“双下iter”方法的数据类型就是可迭代的 — 可迭代协议
#数据类型和pyth解释器订下来的协议
# print([1,2,3].__iter__()) # list_iterator
# 迭代器就是实现了能从其中一个一个的取出值来
迭代器中有 __next__ 和 __iter__ 方法 —— 迭代器协议
学过的所有可以被for循环的 基本数据类型 都是可迭代的 而不是迭代器
# 可迭代对象
可迭代协议:含有 __iter__方法的对象
from collections import iterable
print(isinstance(要检测的对象,Iterable))
# 迭代器
# 迭代器协议:含有 __iter__ 和 __next__ 方法的对象
from collections import Iyerator
print(isinstance(要检测的对象,Iterator))
# 迭代器和可迭代对象之间的关系
迭代器包含了可迭代对象
迭代器 = 可迭代对象.__iter__()
# 为什么要有迭代器,迭代器存在的本质是什么:
1.能够对python中的基本数据类型进行统一的遍历,不需要关心每一个值是什么
2.它可以节省内存 — 惰性运算
迭代器 天生的,比如文件句柄 后天的,可迭代对象.__iter__()