迭代器时访问集合元素的一种方式,迭代器对象从集合的第一个元素开始访问,直到所有元素被访问,迭代器只能往前不会后退。
list=[1,2,3,4]
it=iter(list)
print(next(it)) # 1
print(next(it)) # 2
通过迭代器对象遍历:
list=[1,2,3,4]
it=iter(list)
for value in it:
print(value)
list=[1,2,3,4]
it=iter(list)
while True:
try:
print(next(it))
except StopIteration:
pass
把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() ,__iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__()方法并通过 StopIteration 异常标识迭代的完成。__next__() 方法返回下一个迭代器对象,StopIteration异常用于标识迭代的完成,防止出现无限循环的情况。
class MyClass:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyClass()
iter = iter(myclass)
for x in iter:
print(x)
使用了yield的函数被称为生成器,生成器是一个返回迭代器的函数,只能用于迭代操作,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
def myIterFunc(maxNumber):
initValue=0
while True:
if initValue>=maxNumber:
return
yield initValue
initValue+=1
iter = myIterFunc(5)
for x in iter:
print(x) # 0 1 2 3 4