了解 Python迭代器和生成器
发布时间:2021-11-12 09:45:02 所属栏目:PHP教程 来源:互联网
导读:Python迭代器和生成器都是访问集合元素的一种方式。 一、迭代器 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 字符串,列表或元组对象都可用于创建迭代器。 1、迭
Python迭代器和生成器都是访问集合元素的一种方式。 一、迭代器 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 字符串,列表或元组对象都可用于创建迭代器。 1、迭代器有两个基本的方法: iter() 创建迭代器对象 next() 输出迭代器的下一个元素 from collections.abc import Iterator s = '123' it1 = iter(s) print(isinstance(it1, Iterator)) #判断一个对象是否迭代器对象,输出:True print(next(it1)) #输出:1 print(next(it1)) #输出:2 print(next(it1)) #输出:3 #print(next(it1)) #超出范围会运行报错StopIteration li = [1,2,3] it2 = iter(li) print(next(it2)) #输出:1 print(next(it2)) #输出:2 print(next(it2)) #输出:3 it3 = iter(li) #用list可将迭代器转换为列表 print(list(it3)) 关于 Python迭代器和生成器 2、迭代器遍历的两种方式:for、while import sys s = '123' it1 = iter(s) for i in it1: print(i) li = [1,2,3] it2 = iter(li) while True: try: print(next(it2)) except StopIteration: sys.exit() 关于 Python迭代器和生成器 3、把一个类作为迭代器使用:在类中实现__iter__()与 __next__() 方法 # 斐波那契数列 class Fibs: def __init__(self): self.a = 0 self.b = 1 def __next__(self): self.a,self.b = self.b, self.a+self.b return self.a def __iter__(self): return self fibs = Fibs() for f in fibs: if f > 1000: print(f) break 关于 Python迭代器和生成器 二、生成器 生成器是一种特殊的迭代器,使用了 yield 的函数被称为生成器,即生成器是一个返回迭代器的函数,只能用于迭代操作。 1、创建生成器 # 生成器函数 def Fibs(n): a, b, counter = 0, 1, 0 while True: if (counter > n): return yield a a, b = b, a + b counter += 1 f = Fibs(6) # f是一个迭代器 print(next(f)) print(next(f)) print(next(f)) #可以用next print(f.__next__()) #也可以用__next__ print(f.__next__()) print(f.__next__()) print(f.__next__()) '''输出: 0 1 1 2 3 5 8 ''' for f in Fibs(6): print(f) '''输出: 0 1 1 2 3 5 8 ''' 关于 Python迭代器和生成器 2、生成器表达式 生成器表达式与列表推导式类似,不同之处是最外层的[]换成(),不立即执行循环,而是返回一个生成器。 r = (i*2 for i in range(5)) print(next(r)) print(next(r)) print(next(r)) print(next(r)) print(next(r)) '''输出: 0 2 4 6 8 ''' ''' 也可以遍历 for i in r: print(i) ''' r2 = sum(i*2 for i in range(5)) print(r2) '''输出: 20 ''' ![]() (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |