生成器
生成器 生成器 生成器仅仅保存了一套生成数值或者对象的算法,并且没有让这个算法现在就开始执行,而是我什么时候调它,它什么时候开始计算一个新的值,并给你返回。 为何要用生成器 存储海量的数据会占用内存资源,如果我们可以根据算法推算后面的数据,什么时候需要的时候就去生成,这样将极大地减少内存占用。 创建生成器 1. 列表生成式的[]改成() L = [x * x for x in range(10)] print(L) G = (x * x for x in range(10)) print(G) print(next(G) 执行结果 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] <generator object <genexpr> at 0x02739DB0> 0 next是生成器能迭代的关键, next(G)等价于G.__next__() ,调用他就生成一个新的对象并返回。 2. yield 在函数里面有yield关键字,函数就变成了一个生成器。当调用next()函数时,就相当于生成下一个对象(统称),这一次next开始的地方是接着上一次next停止的地方执行的,即yield之后继续执行,到yield处返回生成的对象。 例子 def fun(): print('run fun') while True: rtn = yield 6 print('rtn