迭代器实际上就是 Java 中的 Iterator,这个很好理解,其实就是挨个访问元素,去遍历整个容器。
例如,迭代字符串
for c in "String":
print(c)
迭代文件的每一行
f = open("file.txt","rt")
for line in f:
print(line)
迭代字典:
for key in dicts:
print(key,"->",dicts[key])
那么这些循环在底层他们所触发的就是迭代器。
python提供了两个魔法方法(内置函数)。
当我们调用 iter( 容器 ) 和 next( 迭代器 ) 这两个方法
举个例子
strs = "Strings"
#获得strs的迭代器
it = iter(strs)
#访问下一个元素
next(it)
#当没有下一个元素可以访问时,
#就会抛出 StopIteration 异常
那么完整版的写法应该是这样
it = iter(strs)
while True:
try:
item = next(it)
except StopIteration:
break
print(item)
或者
it = iter(strs)
i = 0
while i < len(strs):
item = next(it)
print(item)
i++
iter() 方法,返回这个类的迭代器,next() 方法是决定如何遍历此对象的关键。
我们来实现一个斐波那契数列的迭代器。
class Fib:
def __init__(self):
self.f1 = 0
self.f2 = 1
def __iter__(self):
return self
def __next__(self):
self.a , self.b = self.b,self.a+self.b
return self.a
fibs = Fib()
#触发迭代器,但是这个循环时无限循环
for item in fibs:
print(item)
#只获得前10个
it = iter(fibs)
for i in range(10):
print(next(it))