字符串,列表或元组对象都可用于创建迭代器:
list = [1,2,3,4,5,6,7,8,9] it = iter(list) # 创建迭代器对象 print(next(it)) """1"""迭代器对象可以使用常规的for语句进行遍历:
list = [1,2,3,4] it = iter(list) for x in it: print(x, end = " ") """1 2 3 4"""也可以使用next()函数
import sys list = [1,2,3,4] it = iter(list) while True: try: print(next(it)) except StopIteration: sys.exit() """ 执行结果 1 2 3 4 """实例:求一个数的因子
创建一个返回数字的迭代器,初始值为1,逐步递增1:
class ReturnNumber: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x returnnumber = ReturnNumber() Iter = iter(returnnumber) print(next(Iter)) print(next(Iter)) print(next(Iter)) print(next(Iter)) print(next(Iter)) """执行结果 1 2 3 4 5 """StopIteration StopIteration异常用于标识迭代的完成,防止出现无限循环的情况,在__next__()方法中我们可以设置在完成指定循环次数后出发StopIteration异常来结束迭代
在20次迭代后停止执行:
class ReturnNumber: 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 returnnumber = ReturnNumber() Iter = iter(returnnumber) for x in Iter: print(x) """执行结果 1 2 · · · 19 20 """使用yield实现斐波那契数列:
import sys def fibonacci(n): #生成器函数---斐波那契 a, b, counter = 0, 1, 0 while True: if (counter > n): return yield a a, b = b, a+b counter += 1 f = fibonacci(10) # f是一个迭代器,由生成器返回生成 while True: try: print(next(f), end = " ") except StopIteration: sys.exit() """执行结果 0 1 1 2 3 5 8 13 21 34 55 """