可迭代协议:
内部含有__iter__方法的值/变量都是可迭代的.可迭代类型和python语言之间的协议.
可迭代对象:
iterable,内部包含__iter__()函数.
迭代器:
iterator,内部同时包含__iter__()和__next__().
迭代器的特点:
1节省内存, 2.惰性机制, 3一次性取值,只能按顺序取
可迭代变量.__iter__(),返回一个迭代器.
1 l = [1,2,3,4] 2 res = l.__iter__() 3 print(res.__next__()) 4 print(res.__next__()) 5 print(res.__next__()) 6 print(res.__next__()) 7 print(res.__next__()) 8 9 res.__setstate__(2) # 控制迭代器从哪儿开始迭代 10 print(res.__length_hint__()) # 迭代器中有多少个元素 11 12 res1 = l.__iter__() 13 res2 = l.__iter__() 14 15 # res1和res2都是迭代器 16 # 是两个完全不同的迭代器 17 for i in res1: 18 print(i) 19 print('------') 20 for i in res1: 21 print(i) 22 print('^^^^^^') 23 for i in res2: 24 print(i) 25 print('!!!!!!!') 26 for i in l.__iter__(): 27 print(i) 28 print('******') 29 for i in l.__iter__(): 30 print(i) 31 for i in l: 32 print(i) 33 print('########') 34 for i in l: 35 print(i)
for 循环取值
for循环内部的机制就是迭代器取值机制
在for循环执行的过程中:先把可迭代的变成一个迭代器,然后再从中一个个的取值
for循环与迭代器的关系:
无论是可迭代的还是迭代器都可以被for循环,
如果直接循环迭代器,循环一次就能把值取完,不能再进行取值,
如果循环的是非迭代器,那么每一次循环都会通过iter生成一个新的迭代器,可以重复取值.