python使用yield来减少内存开销

本文参考自:http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

以斐波那契数列的实现来说明这个问题:

demo1:

def fab(max): 
    n, a, b = 0, 0, 1 
    L = [] 
    while n < max: 
        L.append(b) 
        a, b = b, a + b 
        n = n + 1 
    return L
for n in fab(5):
     print n
一般来讲,我们都会写成上边程序的样子,这样既实现了基本功能,又可以复用,基本符合要求了。

但是如果max是1000w或者更大呢,那么存储在list中将会占据很大的内存。常见的情况还包括一下消耗大量内存的做法:

for line in open("test.txt").readlines(): 
    print line
#这种做法是将文件的中的内容一次全部读取到内存中,每次从内存中取出一行然后输出,如果文件内容太大,将消耗大量的内存。
for line in open("test.txt"):
     print line
#这种做好就好多了,既简单又不节省内存,利用迭代器来每次读取一行数据。
for i in range(1000): pass
#会产生一个1000个元素的list
for i in xrange(1000): pass
#xrange()产生的是一个迭代对象,而不是一个1000个元素的list, 每次迭代返回下一个数值 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值