Python中的生成器

python中的生成器,边循环边计算,节省内存

第一种创建生成器的方法:只要把一个列表生成式的 [ ] 改成 ( )

l = [x*2 for x in range(5) ]
print(l)

g = (x*2 for x in range(5))

print(g)

print(next(g))

第二种方法:函数方式

def fib(n):
    a,b = 0,1
    i = 0
    while(i<n):
        a,b = b,a+b
        #print(a)
        yield a
        i += 1

if __name__ == "__main__":
   g = fib(5)
   print(g)
   #for temp in g:
   #    print(temp)
   
   while True:
       try:
           print(next(g))
       except StopIteration as e:
           print("%s"%e)
           break

yield的执行流程

g = fib(5)这行代码只是生成了一个生成器,并没有把所有的结果计算出来。只有在迭代这个生成器的时候,才会计算每次的结果。第一次迭代,执行到yield时,程序会暂停,然后返回这次生成器的结果输出;之后,继续执行程序,继续第二次迭代,再次到yield时,程序再次暂停,输出此次生成器结果;再继续第三次迭代。。。再到yield。。再输出结果。。继续下一次迭代

生成器的特点

节约内存
迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值