【Python】迭代器和生成器
迭代器
迭代器对象是一个可以记住遍历的位置的对象
从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
# 创建迭代器对象 迭代内容可为字符串,列表,元组 it = iter([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) for i in range(5): print("ava", next(it)) for i in range(5): print("bvb", next(it))
# 创建迭代器对象 迭代内容可为字符串,列表,元组 it = iter([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) while True: try: # 输出迭代器的下一个元素 print(next(it)) # 迭代器结束 退出 except Exception as e: break
迭代类
class MyNumber: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x if __name__ == "__main__": MyClass = MyNumber() myiter = iter(MyClass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
生成器
使用了 yield 的函数被称为生成器(generator),调用一个生成器函数,返回的是一个迭代器对象
def fibonacci(n): # 生成器函数 - 斐波那契 a, b, counter = 0, 1, 1 while True: if (counter > n): return # print("a=", a) yield a a, b = b, a + b counter += 1 if __name__ == "__main__": f = fibonacci(10) # f 是一个迭代器,由生成器返回生成 while True: try: print("\n迭代器输出:%s" % f) print(next(f), end=" ") except StopIteration: sys.exit()
执行结果:
-------------------------------------------------------------------------------------
如果万事开头难 那请结局一定圆满 @ Phoenixy
-------------------------------------------------------------------------------------