python生成器
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
当我们需要一个很大的数据时,普通的方法是将数据加载到内存,生成器则是随用随生成,要快很多
这里,我们计算10000个斐波那契数所需的时间
import time import sys def fib(n): start=0 a,b=0,1 while start<n: yield a a,b= b, a+b start+=1 start=time.time() result=fib(10000) list1=[] while True: try: res=next(result) list1.append(res) print(res) except StopIteration: break end=time.time() print("-------------------------------") def f(n): list1=[] a,b,start=0,1,0 while start<n: a,b=b,a+b start+=1 list1.append(a) sys.stdout.writelines(str(list1)+"\n") sys.stdout.writelines(str(len(list1))+"\n") start2=time.time() f(10000) end2=time.time() print(list1) print(len(list1)) print("Generator Spent time: ",end-start) print("Function Spent time: ",end2-start2)
Generator Spent time: 28.811378240585327 Function Spent time: 38.723976373672485
普通函数需要38秒,而用生成器的话,只用28秒...
浙公网安备 33010602011771号