python三大神器之迭代器

可迭代协议:

           内部含有__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生成一个新的迭代器,可以重复取值.

原文地址:https://www.cnblogs.com/ppf3678/p/9983932.html