本文参考自: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, 每次迭代返回下一个数值