python(16)——生成器
#生成器(generator):Python中一边循环一边计算出元素的机制,称之为生成器
#通过圆括号编写生成器推导式 g = (x * x for x in range(1,4)) print(g) #next()函数 获取生成器的下一个元素 ,后面没有元素时,弹出错误StopIteration result = next(g) print(result) result = next(g) print(result) result = next(g) print(result) #result = next(g) #print(result) #for循环进行遍历 for i in g: print(i)
#使用yield返回的函数会变成一个生成器
#调用生成器的过程中,遇到yield时函数会暂停并保存当前所有的运行信息,返回yield值
#在下一次执行next()方法时从当前位置运行
#斐波那契函数 def fibonacci(max): a=0 b=1 n=0 while n < max: yield a #yield让函数变成一个生成器 a,b = b,a+b n+=1 #调用函数 fib=fibonacci(5) #生成器类 print(type(fib)) #遍历生成器 for i in fib: print(i) #列表打印斐波那契函数 def fib(max): a=0 b=1 n=0 while n < max: print(a) a,b=b,a+b#赋值语句,同时赋值 n+=1 return 'done' #调用 fib(5) #每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行 #定义一个generator,依次返回1,3,5: def odd(): print('step1') yield 1 print('step2') yield (3) print('step3') yield (5) #调用生成器对象,用next()获取下一个返回值 G=odd() result=next(G) #print(result) result=next(G) #print(result) result=next(G) #print(result) g=fibonacci(6) while True: try: x=next(g) print('g:',x) except StopIteration as e: print('generator return value:',e.value) break