Python迭代器
为方便日后查询和学习,关于Python迭代器的内容将从可迭代对象、迭代器和从迭代器到序列三个方面总结
1. 可迭代对象
a. Python中经常使用for...in...来对某个对象进行遍历,此时被遍历的对象就是迭代对象
b. 容器(list/tuple/dict/set)、文件、容器都是可迭代对象
c. 可迭代对象内部都定义了可以返回一个迭代器的__iter__方法或可以支持下标索引的__getitem__方法
2. 迭代器(iterator)
任何实现了__iter__和__next__方法的独享都是迭代器,__iter__返回迭代器的自身,__next__返回容器中的下一个值
当没有更多的元素,则抛出StopIteration异常
例:
class fibs: numb = 100 def __init__(self): print ("step 1") pass def __iter__(self): print ("step 2") return self def __next__(self): print ("step 3") fibs.numb = fibs.numb + 100 return fibs.numb fib = fibs() for i in fib: if i > 200: print (i) break
输出:
>>>> step 1
>>>> step 2
>>>> step 3
>>>> step 3
>>>> 300
3. 从迭代器到序列
除了在迭代器和可爹带对象上进行迭代外,还能把它们转换为序列
class fibs: numb = 100 def __init__(self): #print ("step 1") pass def __iter__(self): #print ("step 2") return self def __next__(self): #print ("step 3") fibs.numb = fibs.numb + 100 if fibs.numb > 700: raise StopIteration return fibs.numb 输出: >>>> fib = fibs() >>>> print (list(fib)) >>>> [200,300,400,500,600,700]