本文讲解一下python生成器的基本用法。python
当数据量很大的时候,好比从一个超大文本文件中读取内容,若是一会儿把数据所有放在列表中,至关于一会儿把大量数据放在了内存中,有可能形成内存溢出。那么如何解决呢?算法
解决方案:不存储全部的数据,而是存储列表元素的生成算法(至关于递推公式),只在使用的时候再根据生成算法生成相应的元素(惰性计算),这就是生成器。函数
a = (x for x in range(3)) print '【Output】' print type(a) print a.next() print '-----' for x in a: print x
【Output】 <type 'generator'> 0 ----- 1 2
若是生成器的递推算法比较复杂,列表生成式的方式已经没法知足要求,那么能够用函数+yield关键字的方式来建立生成器。code
若是一个函数中出现了yield关键字,那么这个函数就再也不是一个普通函数了,而变成了一个生成器,例如:内存
def getNum(max): x = 0 while x < max: yield x # 至关于把普通函数的return语句变成了yield语句 x += 1 a = getNum(3) print '【Output】' print type(a) for x in a: print x
【Output】 <type 'generator'> 0 1 2
def get(): for i in range(3): print 'step' + str(i) yield i yield 111 for i in range(10,12): print 'step' + str(i) yield i yield 222 a = get() print '【Output】' for x in a: print x
【Output】 step0 0 step1 1 step2 2 111 step10 10 step11 11 222
def fib(max): a,m,n = 0,1,1 while(a < max): yield m m,n = n,m+n a += 1 print '【Output】' for x in fib(6): print x
【Output】 1 1 2 3 5 8