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秒...

posted @ 2021-01-08 23:35  我的腹肌不见了  阅读(111)  评论(0)    收藏  举报